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 而不会触发鼠标单击事件。我想将事件延迟到第二次鼠标单击而不是第一次。

我试过以下方法:

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

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 事件来选中或取消选中 CheckBox,然后您可以将 MouseClick 事件用于其他内容。

您可以订阅 CheckedChanged 活动,而不是 Click 活动:

Handler 看起来和您的完全一样:

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

唯一的区别是我们希望仅在第二次单击时显示消息框,这样当您取消选中该复选框时。

不过要小心,如果您更改复选框的默认状态,它将不再起作用。

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