我遇到了以下问题:
当我的程序检查确定的条件并且复选框被选中时,它会抛出ElseIf
Pass 'Any code here that return to the rest of the script
两次;根据调试器,它进入if,抛出MessageBox
,然后发出messagebox
。之后,它再次执行整个if条件
我已经尝试了Checkbox1.Checked == false
关于MSDN
的文档,但我无法实现它。如何解决此复选框问题?
Checkbox1.Threestate
答案 0 :(得分:2)
由于您更改了checkchange事件中的检查,它会再次触发它,您应该取消订阅该事件,然后重新订阅
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
checkBox1.CheckedChanged -= checkBox1_CheckedChanged;
try
{
// Your conditions
}
finally
{
checkBox1.CheckedChanged += checkBox1_CheckedChanged;
}
}
答案 1 :(得分:1)
只要设置Checked = false
,就会更改其值,并再次触发Changed
事件。
解决此问题的一种方法是使用一个保护变量,确保在处理事件时不再检查代码:
private bool handlingCheckboxChanged;
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if(handlingCheckboxChanged) { return; }
handlingCheckboxChanged = true;
try {
// Your original code
} finally {
handlingCheckboxChanged = false;
}
}
更好的做法是确保用户无法首先检查复选框,例如通过处理文本框的更改事件,并且只有在满足所有条件后才启用复选框。
答案 2 :(得分:1)
如果未选中复选框,则可以跳过它。
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (!checkBox1.Checked) return; //<- this.
string currPath = textBox1.Text;
if (!textBox1.Text.Contains("\\"))
{
MessageBox.Show("Please define the input folder before starting");
checkBox1.Checked = false;
}
else if (!textBox2.Text.Contains("\\"))
{
MessageBox.Show("Please define the XML Output folder before starting");
checkBox1.Checked = false;
}
else if (!textBox3.Text.Contains("\\"))
{
MessageBox.Show("Please define the Converted PPF Output Folder before starting");
checkBox1.Checked = false;
}
else if (!textBox4.Text.Contains("\\"))
{
MessageBox.Show("Please define the Invalid PPF Output Folder before starting");
checkBox1.Checked = false;
}
else
{
// calls the watcher
prg.ProgramProcessing(textBox1.Text);
}
}
答案 3 :(得分:1)
您有多种解决方案:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
checkBox1.CheckedChanged -= checkBox1_CheckedChanged;
// Yours conditions
checkBox1.CheckedChanged += checkBox1_CheckedChanged;
}
OR
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if(checkBox1.Checked == false)
{
return;
}
// your conditions..
}