这控件.RemoveByKey不';无法按预期删除

本文关键字:删除 RemoveByKey 控件 | 更新日期: 2023-09-27 17:57:52

这是我的代码:

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;
        }
    }

检查模式VerifyBtn会创建您所期望的单选按钮。然而,当我选中另外两个单选按钮中的一个时,它不会删除单选按钮,直到我单击了另一个单选按钮。即

步骤1)点击模式VerifyButton(按钮在那里,正如预期的那样步骤2)单击modeGscBtn(按钮仍然存在,不希望这样)步骤3)点击模式搜索类别Btn(按钮消失)

这是怎么回事?

这控件.RemoveByKey不';无法按预期删除

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

单选按钮。CheckChanged事件在Checked和Unchecked事件上都被调用。每次单击都会调用您的modeRadioChecked两次。

将您的比较更改为:

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

步骤1)点击模式VerifyButton(按钮在那里,正如预期的

只有一个事件Checked(CheckedChanged)为modeVerifyBtn触发。执行进入第一个if块内部。一切都很好。

步骤2)点击模式GscBtn(按钮仍然在那里,不希望这样)

为modeVerifyBtn激发第一个Unchecked(CheckedChanged)事件。执行进入第一个if块内部。您将另一个Button添加到表单的初始按钮的确切位置,使其看起来没有任何变化,但它确实发生了变化。现在您的表单有两个按钮。

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

步骤3)点击模式搜索类别Btn(按钮消失)

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

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