这控件.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(按钮消失)
这是怎么回事?
假设您没有通过此调试,因为答案将立即显现出来。
单选按钮。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
属性。