C# TreeNode.EndEdit与NodeLabelEditEventArgs.CancelEdit
C# TreeNode.EndEdit与NodeLabelEditEventArgs.CancelEdit,c#,.net,winforms,treeview,treenode,C#,.net,Winforms,Treeview,Treenode,TreeNode.EndEdit与设置NodeLabelEditEventArgs.CancelEdit之间有什么区别?从表面上看,调用EndEdit(true)似乎与在or事件处理程序中发出e.CancelEdit=true的操作是一样的。然而,这两种方法并不等同,也不用于相同的目的 最好用一个实际的行为示例来演示: 他们做同样的事情,因为: 如果调用EndEdit(true),树节点将离开编辑模式并放弃更改 如果在标记后编辑期间发出e.CancelEdit=true,则树节点将离开编辑模式
TreeNode.EndEdit
与设置NodeLabelEditEventArgs.CancelEdit
之间有什么区别?从表面上看,调用EndEdit(true)
似乎与在or事件处理程序中发出e.CancelEdit=true
的操作是一样的。然而,这两种方法并不等同,也不用于相同的目的
最好用一个实际的行为示例来演示:
他们做同样的事情,因为:
- 如果调用
,树节点将离开编辑模式并放弃更改EndEdit(true)
- 如果在标记后编辑期间发出
,则树节点将离开编辑模式并放弃更改e.CancelEdit=true
- 如果不调用
,树节点编辑模式将不会更改(显然)EndEdit(true)
- 如果在
期间未发出AfterLabelEdit
,则树节点仍将离开编辑模式(并提交更改)e.CancelEdit=true
- 如果在
期间未发出beforelabedit
,则树节点仍将进入编辑模式e.CancelEdit=true
EndEdit()
触发AfterLabelEdit
,但AfterLabelEdit
不会递归触发自身(幸运的是)
现在,通常用于验证,即放弃对树节点标签的无效修改(在AfterLabelEdit
期间),或完全阻止用户编辑某些节点的标签(在AfterLabelEdit
期间)。在这两种情况下,用户要么已经完成,要么尚未开始编辑标签
应用于在用户仍在编辑标签时强制提交或取消编辑。当然,这意味着EndEdit(false)
是邪恶和错误的,因为它在用户完成键入之前,未经其同意,就提交了一个潜在的破坏性更改。事实上,我从未见过这样的称呼
如果其他内容现在绝对需要焦点,并且您不想在树节点失去焦点时自动提交未完成的编辑,则调用EndEdit(true)
放弃当前编辑可能会很有用。不过,以这种方式扔掉用户的工作仍然是不礼貌的
早在MFC时代,有一个合法的使用EndEdit(true)
等价物:当用户按下ESC
键时,取消编辑。信不信由你,那个时候MFC不支持这个功能(也许今天还不支持,我没有检查)
但是现在,在我看来,
EndEdit()
没有多少用处了。最好让它平静下来。不管是邪恶还是邪恶,当我进入顶部菜单时,我不得不调用EndEdit,我的节点没有离开编辑模式。这就是它们之间的主要区别:您可以在任何地方调用EndEdit,而如果AfterLabeleEdit尚未触发,则不能使用CancelEdit。