我自学C#并遇到了一个我似乎也没有找到答案的问题。我有一个表单,当我单击复选框时,状态变为true但也立即触发鼠标单击事件我有代码如下:
private void uxCheckBoxMouseClick(object sender, MouseEventArgs e)
{
//MouseEventArgs me = (MouseEventArgs) e;
if (uxMouseCopyCheckBox.Checked)
{
MessageBox.Show("Test");
uxMouseCopyCheckBox.Checked = false;
}
}
我搜索了堆栈溢出和谷歌并发现了类似的项目,但没有在C#中,但在固定解决方案上没有运气。我想要做的是使用第一次单击将复选框更改为true而不触发鼠标单击事件。我想将事件延迟到第二次鼠标点击,而不是第一次。
我尝试了以下内容:
答案 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
事件用于其他内容。