我正在使用 Microsoft 的 TreeView 控件,并尝试在编辑节点标签时强制进行某种数据更新,类似于网格的 UpdateData。

基本上,在我的编辑器中,我有一个“保存”按钮和这个 TreeView 控件:我想要的是当我在 TreeView 中编辑节点的标签时,如果单击“保存”按钮,我希望能够提交我正在编辑的节点的标签。

有帮助吗?

解决方案

节点标签编辑是使用文本框执行的,当该文本框失去焦点时,名称更改将作为节点的新标签提交。因此,如果您单击的“保存”按钮获得焦点,那么它将导致自动更新,因为文本框将失去焦点。

如果“保存”按钮没有获得焦点,则需要处理“保存”按钮的单击事件,并要求树结束任何当前的标签编辑。如果没有方法/属性,您可以调用请求标签编辑完成,这样您有两种选择。如果树视图有焦点,则将焦点放在其他地方。或者关闭/再次打开标签编辑...

treeView.LabelEdit = false;
treeView.LabelEdit = true;

其他提示

我会接受答案,即使它没有真正记录下来:有没有这样的方法?你其实没有回答这个问题,只是把问题转给了我。

同时发现了同样的黑客解决方案,强制将焦点转移到其他一些控件(不是很优雅,但有效),尽管这对我来说有点困难,因为我使用 TreeView 作为 UserControl 的一部分。

您真的需要保存按钮吗?

您可以监听节点编辑的结束 - 例如通过监听 TreeView 的 KeyDown 事件中的“返回”键。如果您正在编辑某些内容(使用 SelectedNode.IsEditing 进行查找),那么您就知道您已经提交了。然后您可以将其提交到您的数据更新内容中。如果您希望能够编辑许多不同的节点并在最后保存它们,那么您需要将每个编辑的节点添加到某种类型的集合中,然后当您单击保存按钮时迭代该集合。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top