C# 隐藏datagridviews错误 我有一个窗体,左边是一个面板,它纯粹是由无线按钮组成的,中间有一个表控件,里面有多个选项卡页。每个单独的选项卡页中都有一系列DataGridView,它们的显示和隐藏取决于您选中的单选按钮
我通过为左侧的每个单选按钮分配一个CheckChanged事件来实现这一效果,该事件循环遍历tabpagecontrol.SelectedTab中的所有控件,并在相应的datagridview上调用.Show(),在其余的上调用.Hide(),以便一次只能看到一个datagridview 当我试图以编程方式检查其中一个单选按钮时,就会出现问题。假设在方法X中,我写RadioButtonA.checked=true。这将触发通常的CheckedChange事件处理,该事件处理在当前所选选项卡页上的所有datagridview中循环,并对所有对象调用.Hide(),但radiobutton应该调用的datagridview窗体除外,并改为调用.Show()。但是,在datagridview上调用其中一个.Hide()时,它会再次触发RadioButtonA.CheckedChange事件。当我查看传递给函数的sender参数时,它显示sender就是我刚才通过编程单击的单选按钮C# 隐藏datagridviews错误 我有一个窗体,左边是一个面板,它纯粹是由无线按钮组成的,中间有一个表控件,里面有多个选项卡页。每个单独的选项卡页中都有一系列DataGridView,它们的显示和隐藏取决于您选中的单选按钮,c#,user-interface,radio-button,C#,User Interface,Radio Button,我通过为左侧的每个单选按钮分配一个CheckChanged事件来实现这一效果,该事件循环遍历tabpagecontrol.SelectedTab中的所有控件,并在相应的datagridview上调用.Show(),在其余的上调用.Hide(),以便一次只能看到一个datagridview 当我试图以编程方式检查其中一个单选按钮时,就会出现问题。假设在方法X中,我写RadioButtonA.checked=true。这将触发通常的CheckedChange事件处理,该事件处理在当前所选选项卡页上的
我以编程方式添加这些DataGridView,并且可以确认没有为它们分配任何EventHandler。有人能帮我确定是什么原因触发了这个额外的事件吗?谢谢。对于在我的表单上通过并打乱其他事件处理程序的讨厌的更改事件,我发现唯一的解决方案是添加一个小的布尔值:
bool radioIng;
void MyMethod() {
radioIng = true;
try {
radioButton1.Checked = true;
// etc.
} finally {
radioIng = false;
}
}
void radioButton_EventHandler(object sender, EventArgs e) {
if (radioIng) return;
// rest of code here
}
编辑:
或者,您可以删除所有事件处理程序,然后重新连接它们:
void MyMethod() {
try {
radioButton1.CheckChanged -= radioButton_EventHandler;
radioButton2.CheckChanged -= radioButton_EventHandler;
radioButton3.CheckChanged -= radioButton_EventHandler;
// execute your code
radioButton1.Checked = true;
} finally {
radioButton1.CheckedChanged += new EventHandler(radioButton_EventHandler);
radioButton2.CheckedChanged += new EventHandler(radioButton_EventHandler);
radioButton3.CheckedChanged += new EventHandler(radioButton_EventHandler);
}
}
void radioButton_EventHandler(object sender, EventArgs e) {
if (sender == radioButton1) {
// code here to handle
} else if (sender == radioButton2) {
// code here to handle
} else if (sender == radioButton3) {
// code here to handle
}
}
感谢jp2code的建议,但这似乎是针对症状而不是原因。如果可能的话,我想解决根本问题,并将这一办法作为最后手段。谢谢。使用更正确的技术进行编辑,解决了根本问题。:)
Boolean
解决方案同样有效……而且速度更快!