Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐藏datagridviews错误 我有一个窗体,左边是一个面板,它纯粹是由无线按钮组成的,中间有一个表控件,里面有多个选项卡页。每个单独的选项卡页中都有一系列DataGridView,它们的显示和隐藏取决于您选中的单选按钮_C#_User Interface_Radio Button - Fatal编程技术网

C# 隐藏datagridviews错误 我有一个窗体,左边是一个面板,它纯粹是由无线按钮组成的,中间有一个表控件,里面有多个选项卡页。每个单独的选项卡页中都有一系列DataGridView,它们的显示和隐藏取决于您选中的单选按钮

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事件处理,该事件处理在当前所选选项卡页上的

我通过为左侧的每个单选按钮分配一个CheckChanged事件来实现这一效果,该事件循环遍历tabpagecontrol.SelectedTab中的所有控件,并在相应的datagridview上调用.Show(),在其余的上调用.Hide(),以便一次只能看到一个datagridview

当我试图以编程方式检查其中一个单选按钮时,就会出现问题。假设在方法X中,我写RadioButtonA.checked=true。这将触发通常的CheckedChange事件处理,该事件处理在当前所选选项卡页上的所有datagridview中循环,并对所有对象调用.Hide(),但radiobutton应该调用的datagridview窗体除外,并改为调用.Show()。但是,在datagridview上调用其中一个.Hide()时,它会再次触发RadioButtonA.CheckedChange事件。当我查看传递给函数的sender参数时,它显示sender就是我刚才通过编程单击的单选按钮


我以编程方式添加这些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
解决方案同样有效……而且速度更快!