C#复选框和鼠标单击事件

C#复选框和鼠标单击事件,c#,checkbox,mouseclick-event,C#,Checkbox,Mouseclick Event,我在自学C#,遇到了一个我似乎也找不到答案的问题。我有一个表单,当我用鼠标点击复选框时,状态变为true,但也会立即触发鼠标点击事件,我有如下代码: private void uxCheckBoxMouseClick(object sender, MouseEventArgs e) { //MouseEventArgs me = (MouseEventArgs) e; if (uxMouseCopyCheckBox.Checked) { MessageBo

我在自学C#,遇到了一个我似乎也找不到答案的问题。我有一个表单,当我用鼠标点击复选框时,状态变为true,但也会立即触发鼠标点击事件,我有如下代码:

private void uxCheckBoxMouseClick(object sender, MouseEventArgs e)
{
    //MouseEventArgs me = (MouseEventArgs) e;
    if (uxMouseCopyCheckBox.Checked)
    {
        MessageBox.Show("Test");
        uxMouseCopyCheckBox.Checked = false;

    }
}
我搜索了stack overflow和Google,找到了类似的项目,但没有在C#中找到,但没有找到解决方案。我想做的是使用第一次单击将复选框更改为true,而不触发鼠标单击事件。我想将事件延迟到第二次鼠标单击,而不是第一次

我尝试了以下方法:

  • for循环
  • 使用if语句单击==2
  • 订阅但不知该用什么

只需使用布尔变量作为标志

private bool wasAlreadyClickedOnce;

private void uxCheckBoxMouseClick(object sender, MouseEventArgs e)
{
    if (!wasAlreadyClickedOnce)
    {
        wasAlreadyClickedOnce = true;
        return;
    }

    if (uxMouseCopyCheckBox.Checked)
    {
        MessageBox.Show("Test");
        uxMouseCopyCheckBox.Checked = false;

    }
}

尝试使用事件而不是
CheckedChanged
事件来选中或取消选中
复选框
,然后您可以使用
鼠标单击
事件来处理其他内容。

而不是
单击
事件,您可以将事件订阅到
CheckedChanged
事件:

处理程序看起来与您的完全相同:

private void uxMouseCopyCheckBox_CheckedChanged(object sender, EventArgs e)
{
    if (!uxMouseCopyCheckBox.Checked)
    {
        MessageBox.Show("Test");
        uxMouseCopyCheckBox.Checked = false;
    }
}
唯一的区别是,我们希望消息框仅在第二次单击时显示为shwon,因此当您取消选中该复选框时

但是要小心,如果更改复选框的默认状态,它将不再工作


如果你想要一个真正强大的解决方案Grant的一个是IMHO最好的,我的只是在这里向你展示如何调整你的代码使其工作

@Sidewinder94我想他使用的是
鼠标点击
事件,而不是
点击
事件我已经尝试将代码移动到点击事件,同样的事情发生了。我一选中复选框,单击事件就会立即触发。谢谢您的帮助,但现在我需要研究为什么鼠标单击只关注复选框区域而不是整个表单。@Solorn我认为这是因为您在将处理程序订阅到单击事件时选中了复选框。如果希望处理程序在整个表单上执行单击操作,则必须将其订阅到表单的单击事件是的,我在发布我的评论不久后发现了这一点=/谢谢大家。