this.Controls.RemoveByKey没有按预期删除

时间:2014-04-10 20:03:18

标签: c# winforms

这是我的代码:

private void modeRadioChecked(object sender, EventArgs e)
    {
        RadioButton me = (sender as RadioButton);

        if (me == modeVerifyBtn)
        {
            label4.Visible = false;
            categoryField.Visible = false;

            Button button = new Button();
            button.Text = "Select document..";
            button.Name = "selectDocBtn";
            button.Location = label4.Location;

            this.mode = SearchMode.VerifyCategories;
            this.Controls.Add(button);
        }
        else if(me == modeGscBtn)
        {
            this.Controls.RemoveByKey("selectDocBtn");
            this.mode = SearchMode.GetSkuCategories;
            label4.Visible = !label4.Visible;
            categoryField.Visible = !categoryField.Visible;
            categoryField.Enabled = false;
            dataGridView1.DataSource = this.skuResultsContainer;
        }
        else if (me == modeSearchCategoryBtn)
        {
            this.Controls.RemoveByKey("selectDocBtn");
            this.mode = SearchMode.SearchCategory;
            label4.Visible = !label4.Visible;
            categoryField.Visible = !categoryField.Visible;
            categoryField.Enabled = true;
            dataGridView1.DataSource = this.resultsContainer;
        }
    }

检查modeVerifyBtn会像您期望的那样创建radiobutton。但是,当我检查另外两个单选按钮中的一个时,它不会删除单选按钮,直到我点击了另一个单选按钮。即。

步骤1)单击modeVerifyButton(按钮在那里,正如预期的那样 步骤2)单击modeGscBtn(按钮仍在那里,不要这样) 步骤3)单击modeSearchCategoryBtn(按钮消失)

这是什么?

2 个答案:

答案 0 :(得分:0)

假设您没有通过此调试,因为答案会立即显现出来。

在Checked和Unchecked事件上调用RadioButton.CheckChanged事件。每次点击都会调用你的modeRadioChecked两次。

将您的比较更改为:

if(me == modeVerifyBtn && modeVerifyBtn.Checked == true) {
} else if( me == modeGscBtn && modeGscBtn.Checked == true) { 
...

答案 1 :(得分:0)

  

步骤1)点击modeVerifyButton(按钮就在那里,正如预期的那样

只为modeVerifyBtn触发了一个事件Checked(CheckedChanged)。执行进入第一个if块。一切正常。

  

步骤2)单击modeGscBtn(按钮仍在那里,不要这样)

为modeVerifyBtn触发了第一个Unchecked(CheckedChanged)事件。执行进入第一个if块。您可以在初始按钮的确切位置向表单添加另一个Button,使外观没有任何变化,但确实如此。现在你的表单有两个按钮。

为modeGscButton触发了第二个Checked(CheckedChanged)事件。这将删除之前添加的其中一个按钮。现在还有一个。

  

步骤3)点击modeSearchCategoryBtn(按钮消失)

为modeGscButton触发了第一个Unchecked(CheckedChanged)事件。剩下的按钮被删除。 为modeSeacrhCategory触发了第二个Checked(CheckedChanged)事件,它再次删除了一个不存在的按钮,对GUI没有任何影响。

在执行添加或删除选择按钮的任何操作之前,请检查RadioButtons的Checked属性。