Microsoft の TreeView コントロールで遊んでいて、ノードのラベルを編集しているときに、グリッドの UpdateData と同様に、ある種のデータ更新を強制しようとしています。
基本的に、私のエディタには、[保存] ボタンとこの TreeView コントロールがあります。必要なのは、TreeView でノードのラベルを編集しているときに、[保存] ボタンをクリックすると、ノードのラベルをコミットできるようにしたいということです。編集。
本当に保存ボタンが必要ですか?
たとえば、TreeViewのKeyDownイベントで「return」キーをリッスンすることで、ノード編集の終了をリッスンできます。何かを編集している場合(SelectedNode.IsEditingで調べてください)、コミットがあることがわかります。次に、これをdataupdateのものにコミットできます。多くの異なるノードを編集して最後にすべてを保存できるようにする場合は、編集した各ノードをある種のコレクションに追加する必要があります。次に、保存ボタンをクリックすると、このコレクションを繰り返し処理します。
ノード ラベルの編集はテキスト ボックスで実行され、そのテキスト ボックスがフォーカスを失うと、名前の変更がノードの新しいラベルとしてコミットされます。したがって、クリックしている [保存] ボタンがフォーカスを取得すると、テキスト ボックスがフォーカスを失うため、自動的に更新が行われます。
「保存」ボタンにフォーカスがない場合は、「保存」ボタンのクリック イベントを処理し、現在のラベル編集を終了するようにツリーに要求する必要があります。メソッド/プロパティがない場合は、ラベル編集の終了を要求するために呼び出すことができるため、2 つの選択肢があります。ツリー ビューにフォーカスがある場合は、フォーカスを別の場所に置きます。または、ラベル編集をオフ/オンにします...
treeView.LabelEdit = false;
treeView.LabelEdit = true;
実際に文書化されていなくても、答えを受け入れます。そのような方法はありますか、それともありませんか? あなたは実際にはこれに答えず、質問を私に返しただけです。
一方、UserControlの一部としてTreeViewを使用しているため、私にとっては少し難しいですが、他のコントロールにフォーカスを強制するという同じハックっぽいソリューションを見つけました(あまりエレガントではありませんが機能します)。