这是我的代码:
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(按钮消失)
这是什么?
答案 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
属性。