同一个MouseClickEvent C#上的两个函数

时间:2018-03-21 10:07:54

标签: c# winforms mouseclick-event

我在使用Winforms在C#中的复选框上的同一个MouseClick Eventhandler中创建两个单独的函数时遇到了一些困难。

如果用户点击该复选框,则应该警告用户验证操作。如果用户取消选中该复选框,则会显示另一个警告,供用户验证操作。

我的代码如下:

private bool alreadyClicked = false;

private void myCheckbox_MouseClick(object sender, MouseEventArgs e)
    {
        if (!myCheckbox.Checked && !alreadyClicked)
        {
            DialogResult d1 = MessageBox.Show("Some text1", "Some title1", MessageBoxButtons.YesNo);
            if (d1 == DialogResult.Yes)
            {
                myCheckbox.Checked = true;
                alreadyClicked = true;
            }
            else
            {
                myCheckbox.Checked = false;
            }
        }
        if (myCheckbox.Checked && alreadyClicked)
        {
            DialogResult d2 = MessageBox.Show("Some text2", "Some title2", MessageBoxButtons.YesNo);
            if (d2 == DialogResult.Yes)
            {
                myCheckbox.Checked = false;
                alreadyClicked = false;
            }
            else
            {
                myCheckbox.Checked = true;
            }
        }
    }

问题是第二个if语句检查是否选中了复选框,以及" yetClicked" -variable是否为true,当用户验证第一个操作(检查复选框)时触发由于"已点击" - 变量在事件结束前变为真。我感到困惑,并希望得到任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:1)

好吧,让我们看看两个if语句。

首次点击该复选框并回答第一个消息框时,您将复选框和alreadyClicked变量设置为true。之后在第二个if语句中检查这两个值是否为真。他们当然是因为我们只是将它们设置为真。因此,第二个if语句将为true,将显示第二条消息。

要防止出现此行为,您可以在第一个if语句后使用else if (myCheckbox.Checked && alreadyClicked)。在这种情况下,只有当第一个if语句结果为false时,才会处理第二个if语句。

您还可以考虑bool变量alreadyClicked是否真的在这里添加任何值。据我所知,它总是与复选框本身具有相同的价值。