我有一些在代码上动态创建的复选框。我确实使用条形码阅读器读取条形码。当我使用条形码时,我试图阻止触发 Unchecked 和 Checked 事件。为了达到这种效果,我:
- 仅当我将焦点放在复选框上时才分配这两个事件,当我失去焦点时,我将取出事件。
- 在每个 Checked 和 Unchecked 事件之后,我将焦点分配给窗口中的另一个控件(因此会触发 LostFocus 事件)
但是如果我使用条形码阅读器,所有 CheckBoxes 对象如果被选中,都会收到 Unchecked 事件(但如果未选中,则不会收到 Checked 事件)。
有没有办法避免这种情况发生?
唯一使用 Unchecked 方法的地方是代码显示中的地方,而不是应用程序代码中的其他地方。
指向处理这种动态创建复选框的更好方法的指针将不会被忽视。
private void SomeMethod ()
{
foreach (KeyValuePair<String, String> kvp in someDictionary)
{
CheckBox checkBox = new CheckBox();
checkBox.Content = kvp.Key;
checkBox.GotFocus +=new RoutedEventHandler(checkBox_GotFocus);
checkBox.LostFocus += new RoutedEventHandler(checkBox_LostFocus);
checkBox.ClickMode = ClickMode.Release;
Grid.SetRow(checkBox, fileSelectionGrid.RowDefinitions.Count);
fileSelectionGrid.Children.Add(checkBox);
RowDefinition row = new RowDefinition();
fileSelectionGrid.RowDefinitions.Add(row);
}
}
void checkBox_LostFocus(object sender, RoutedEventArgs e)
{
CheckBox checkBox = sender as CheckBox;
checkBox.Checked -= new RoutedEventHandler(checkBox_Checked);
checkBox.Unchecked -= new RoutedEventHandler(checkBox_Unchecked);
}
void checkBox_GotFocus(object sender, RoutedEventArgs e)
{
CheckBox checkBox = sender as CheckBox;
checkBox.Checked += new RoutedEventHandler(checkBox_Checked);
checkBox.Unchecked += new RoutedEventHandler(checkBox_Unchecked);
}
编辑:
刚刚检查了当复选框没有焦点时不会引发点击事件。
最佳答案
通常对于此类问题,我声明一个 bool 标志,该标志在将触发事件的代码行之前和之后分配值,并且当该事件被触发时,它所做的第一件事就是检查该标志值。
例如
bool flag = false;
private void SomeMethod()
{
flag = true;
YourCheckBox.checked = false;
flag = false;
}
void YourCheckBox_Checked(object sender, RoutedEventArgs e)
{
if (flag)
return;
// Do something....
}
void YourCheckBox_UnChecked(object sender, RoutedEventArgs e)
{
if (flag)
return;
// Do something....
}
当我指定 flag = true 时,下一行将触发选择更改事件。当我这样做时,它将返回,因为标志设置为 true;
关于c# - 防止触发 CheckBox Checked 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870124/