2009-11-06 76 views
-1

当一个winform第一次显示时,该复选框默认是取消选中。如果表格第一次显示时,我点击复选框'检查',复选框出现一秒钟后检查,然后消失。 checkedchanged事件从不会触发。但是,如果在第一次初始尝试后的任何时候点击复选框,则值会发生变化(检查为未检查,反之亦然),并且事件触发。C#复选框有奇怪的行为

任何想法为什么复选框不会检查第一次尝试?当你将鼠标悬停在它上面时,它会首次被选中,所以我知道它有重点。

更新:如果您先将数据输入到所有其他控件,然后单击该复选框,则第一次点击它时闪烁,并且检查一秒后闪烁,然后检查消失。在第一次之后的任何时候,尽管它有效。奇怪...

+0

你能发表一些代码吗? – 2009-11-06 16:54:17

+0

发布一些代码,如复选框初始化和事件处理...你使用任何绑定? – jmayor 2009-11-06 17:26:45

+0

你可以发布处理任何复选框事件的方法的代码(点击,CheckChanged等) – 2009-11-06 17:26:53

回答

1

很难说没有看到代码段。当我过去有过这样的事情时,这是由于有重复的控制ID,或错误地连接事件处理程序。您是否尝试禁用部分代码并查看影响复选框行为的因素?

+0

+1指出他需要*减少他的问题空间。然而,你对控件ID的评论大部分都是C++/Win32背景。如果在C#中可以有重复的控制ID,我会感到惊讶......另一方面,接线不好的事件处理程序就是我把钱放在哪里......(我刚写了一个示例应用程序,其中只有一个复选框形式...它保持点击第一次点击它...) – 2009-11-29 03:46:55

0

这样做只有一个CB吗?或表格上的所有CB。

您是否尝试删除CB然后添加回来?

我建议你发布代码背后的代码?

+1

感谢您的响应崩溃和flyfishr,我删除了控件,并将窗体上没有自定义代码作为一个测试新的锥和我没有得到相同的行为。很难看到如果有什么事情造成这种情况。当我删除所有的自定义代码时,它仍然会发生。我已经尝试在构造函数中设置焦点,并将控件设置为checkedstate = checked(这与我想要在表单加载时的默认行为相反),但第一次单击确实将它设置为未检查。如果我设置焦点(),然后将状态设置为未选中状态,则它会完成整个闪光并且不再执行任何操作。 – TCH 2009-11-06 17:03:36

+1

我也将下面的代码放在窗体构造函数中作为一个测试,但它不会改变行为: this.chkbox1.UnCheckedValue =“0”; this.chkbox1.CheckedValue =“1”; this.chkbox1.ThreeState = false; this.chkbox1.Value =“0”; this.chkbox1.Checked = false; 如果我点击第一次点击控件时点击进入点击,但它不会触发CheckChanged()。它虽然在随后的点击做。 – TCH 2009-11-06 17:05:55

1

奇怪的是,把代码中的CheckedChanged()来设置值(它被设置为无论如何,如果我通过它追踪)似乎工作:

 if (this.chkbox1.Checked == true) 
     { 
      this.chkbox1.Value = "1"; 
      this.chkbox1.Text = "Checked"; 
     } 
     else 
     { 
      this.chkbox1.Value = "0"; 
      this.chkbox1.Text = "Un-checked"; 
     } 

我也把焦点()在点击():

 if (((System.Windows.Forms.MouseEventArgs)(e)).Clicks <= 1) 
     { 
      if (this.chkbox1.Focused == false) 
      { 
       this.chkbox1.Focus(); 
      } 
     } 

我不知道为什么解决了这个问题,但它确实如此。

0

对于您的自定义代码,我会尝试使用不同的转换样式,以查看它是否有任何区别。

如果您使用标准的C#语法,它失败(消失复选框)

CheckBox checkBox = sender as CheckBox; 

我会尝试使用发送对象的旧式铸铁,看看它给你想要的结果:

CheckBox checkBox = (CheckBox)sender; 

这可能会给你一个根本原因的提示。