繁体   English   中英

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

[英]C# checkbox and mouse click event

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

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

    }
}

我已经搜索了堆栈溢出和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;

    }
}

除了Click事件,您还可以订阅CheckedChanged事件:

该处理程序看起来与您的完全一样:

private void uxMouseCopyCheckBox_CheckedChanged(object sender, EventArgs e)
{
    if (!uxMouseCopyCheckBox.Checked)
    {
        MessageBox.Show("Test");
        uxMouseCopyCheckBox.Checked = false;
    }
}

唯一的不同是,我们希望仅在第二次单击时才显示“消息”框,以便您取消选中该复选框。

但是请注意,如果更改复选框的默认状态,它将不再起作用。

如果您想要一个真正健壮的解决方案,格兰特(Grant)的解决方案是最好的恕我直言,我只是在这里向您展示如何调整代码以使其工作

尝试使用Click事件而不是CheckedChanged事件来选中或取消选中CheckBox ,然后可以将MouseClick事件用于其他内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM