【发布时间】:2016-03-29 21:01:54
【问题描述】:
当我在 WinForms TreeView 中双击一个未选中的节点时,它在视觉上会变为选中,然后是未选中。
但是,以下事件处理程序检测到只有一个 AfterCheck 事件被触发:
private void treeView1_AfterCheck( object sender, TreeViewEventArgs e )
{
System.Diagnostics.Debug.WriteLine( "{0} {1}: {2}", e.Node.Checked, e.Node, e.Action );
}
e.Node.Checked 是 true,即使 GUI 中的可视化表示未被选中。
再次单击复选框会引发AfterCheck 事件,其中Node.Checked 等于false。该复选框在 GUI 上保持未选中状态。
双击选中的节点反之亦然。
我正在使用 Visual Studio 2010 为 .NET 4.0 编译并在 .NET 4.5.1 上运行。
有什么办法可以解决这个问题?
【问题讨论】:
-
我在其他之后添加了 e.Node.Checked 到 WriteLine。编辑得更加理智。
-
当您双击树视图中的复选框时,不仅会在检查事件后出现问题,还会在您的下一次鼠标按下时出现问题,如果您单击树视图本身的其他任何位置,您的下一个鼠标点击将丢失。我可以确认该问题在 Windows XP 中不存在,但在 7 和 8.1 中存在。
-
@HansPassant 在旧帖子中也提到过:本机 Windows 控件的 Vista 版本在 TreeView 包装器中引入了一个错误。它会自动检查项目,而不会生成包装器可以检测到以引发 BeforeCheck 和 AfterCheck 事件的通知消息。