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

时间:2015-05-05 14:57:09

标签: c# checkbox mouseclick-event

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

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

    }
}

我搜索了堆栈溢出和谷歌并发现了类似的项目,但没有在C#中,但在固定解决方案上没有运气。我想要做的是使用第一次单击将复选框更改为true而不触发鼠标单击事件。我想将事件延迟到第二次鼠标点击,而不是第一次。

我尝试了以下内容:

  • for loop
  • 使用if语句
  • 点击== 2
  • 订阅但不知道如何使用

3 个答案:

答案 0 :(得分:1)

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

private bool wasAlreadyClickedOnce;

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

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

    }
}

答案 1 :(得分:1)

而不是Click事件,而不是CheckedChanged事件:

Handler看起来与你的完全一样:

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

唯一的区别是我们希望仅在第二次点击时才会显示消息框,因此当您取消选中该复选框时。

但请注意,如果您更改复选框的默认状态,它将不再有效。

如果你想要一个非常强大的解决方案Grant的一个是恕我直言最好的,我的就在这里向你展示如何调整你的代码让它工作

答案 2 :(得分:0)

尝试使用Click事件代替CheckedChanged事件来检查或取消选中CheckBox,然后您可以将MouseClick事件用于其他内容。