我正在使用 Microsoft 的 TreeView 控件,并且试图在编辑节点标签时强制进行某种数据更新,类似于网格的 UpdateData。
基本上,在我的编辑器中,我有一个保存按钮和这个 TreeView 控件:我想要的是当我在 TreeView 中编辑节点的标签时,如果我单击保存按钮,我希望能够提交节点的标签我是编辑。
节点标签编辑是使用文本框执行的,当该文本框失去焦点时,名称的更改将作为节点的新标签提交。因此,如果您单击的“保存”按钮获得焦点,那么它将自动导致更新,因为文本框将失去焦点。
如果“保存”按钮没有获得焦点,则需要处理“保存”按钮的单击事件并要求树结束任何当前的标签编辑。如果没有方法/属性,您可以调用以请求标签编辑完成,因此您有两个选择。如果树视图有焦点,则将焦点放在其他地方。或者再次关闭/打开标签编辑...
treeView.LabelEdit = false;
treeView.LabelEdit = true;
即使没有真正记录在案,我也会接受答案:它有还是没有这样的方法?您实际上没有回答这个问题,只是将问题传回给我。
同时发现了相同的黑客解决方案,将焦点强制到其他一些控件(不是很优雅但有效),尽管这对我来说有点困难,因为我使用 TreeView 作为 UserControl 的一部分。
你真的需要保存按钮吗?
您可以监听节点编辑的结束 - 例如通过监听 TreeView 的 KeyDown 事件中的“返回”键。如果您正在编辑某些内容(使用 SelectedNode.IsEditing 查找),那么您知道您有一个提交。然后,您可以将其提交给您的数据更新内容。如果您希望能够编辑许多不同的节点并在最后保存它们,那么您需要将每个编辑的节点添加到某种集合中,然后当您单击保存按钮时遍历该集合。