C#Checkbox有奇怪的行为

时间:2009-11-06 16:50:19

标签: c# winforms checkbox

首次显示winform时,默认情况下取消选中该复选框。如果首次显示表单时,我单击复选框以“检查”它,复选框出现检查一瞬间然后消失。 checkedchanged事件永远不会触发。但是,如果在第一次初始尝试后的任何时候我单击复选框,则值会更改(检查为未选中,反之亦然),就像它应该发生并且事件触发一样。

知道为什么复选框不会在第一次尝试时检查?当您将鼠标悬停在第一次时,它会显示为已选中,因此我知道它具有焦点。

更新:如果您首先在所有其他控件中输入数据,然后单击复选框,第一次单击它时,它会闪烁检查一秒,然后检查消失。在第一次之后的任何时候虽然它有效。奇怪...

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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";
        }

我还在click()中放了一个focus():

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

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

答案 2 :(得分:0)

只用一个CB就能做到这一点?或表格上的所有可换股债券。

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

我建议你在CB后面发布代码吗?

答案 3 :(得分:0)

对于您的自定义代码,我会尝试使用不同的演员样式,看看它是否有所不同。

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

CheckBox checkBox = sender as CheckBox;

我会尝试在发件人对象上使用旧式强制转换,看看它是否能提供所需的结果:

CheckBox checkBox = (CheckBox)sender;

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