我在使用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,当用户验证第一个操作(检查复选框)时触发由于"已点击" - 变量在事件结束前变为真。我感到困惑,并希望得到任何帮助。
提前致谢。
答案 0 :(得分:1)
好吧,让我们看看两个if语句。
首次点击该复选框并回答第一个消息框时,您将复选框和alreadyClicked
变量设置为true
。之后在第二个if语句中检查这两个值是否为真。他们当然是因为我们只是将它们设置为真。因此,第二个if语句将为true,将显示第二条消息。
要防止出现此行为,您可以在第一个if语句后使用else if (myCheckbox.Checked && alreadyClicked)
。在这种情况下,只有当第一个if语句结果为false
时,才会处理第二个if语句。
您还可以考虑bool变量alreadyClicked
是否真的在这里添加任何值。据我所知,它总是与复选框本身具有相同的价值。