-1

リストボックスでプログラムを実行すると、アイテムを選択してEnterキーを押すとすべてが機能しますが、クリアボタンを押してアイテムを再度選択してEnterキーを押すと何も起こりません。クリアボタンについて次のことを試しましたが、ラベルテキストと選択したリストボックスがクリアされましたが、アイテムを選択した後にもう一度Enterボタンを押しても、別の出力を生成できなくなりました。

 public partial class frmLabSix : Form
{
    public string strCakes;
    public int cakeCost;


    public frmLabSix()
    {
        InitializeComponent();
    }

    private void lstCakes_SelectedIndexChanged(object sender, EventArgs e)
    {   
        for (int index = 0; index < lstCakes.SelectedItems.Count; index++)
        {
            strCakes += Environment.NewLine + lstCakes.SelectedItems[index].ToString();

            if (lstCakes.SelectedIndices[index] == 0) cakeCost += 18;
            if (lstCakes.SelectedIndices[index] == 1) cakeCost += 25;
            if (lstCakes.SelectedIndices[index] == 2) cakeCost += 40;
            if (lstCakes.SelectedIndices[index] == 3) cakeCost += 30;
        }

    }

    private void lblOrdered_Click(object sender, EventArgs e)
    {

    }

    private void btnEnter_Click(object sender, EventArgs e)
    {
        double tax = 1.13;
        lblOrdered.Text = "You have ordered: " + strCakes + '\n' + "Total Cost: " + (tax * cakeCost).ToString("C");
        lblOrdered.Visible = true;
    }

    private void btnClear_Click(object sender, EventArgs e)
    {
        lstCakes.SelectedItems.Clear();
        lblOrdered.Visible = false;
    }

    private void btnExit_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}

誰かがこれがなぜなのか教えてもらえますか?

4

1 に答える 1

1

このコード行により、ラベルが非表示になります。

lblOrdered.Visible = false;

クリアボタンのクリックでラベルを非表示にします。その後、可視性をリセットしますか? コードの他の部分で何が起こるかわかりませんが、おそらく次のようになるはずです。

// if the label is not visible, the next line won't make it visible implicitly
lblOrdered.Text = ... 
//you should set label's visibility explicitly
if (!lblOrdered.Visible)
    lblOrdered.Visible = true;

ラベルのテキストを設定しても表示されません。独自のコードで非表示にする場合は、ラベルも明示的に表示する必要があります。

于 2012-10-28T01:58:19.763 に答える