質問

私はMicrosoftのTreeViewコントロールを使って遊んでおり、グリッドのUpdateDataと同様に、ノードのラベルを編集中にある種のデータ更新を強制しようとしています。

基本的に、私のエディタには [保存] ボタンと次の TreeView コントロールがあります。私が望んでいるのは、TreeView でノードのラベルを編集しているときに、[保存] ボタンをクリックすると、編集していたノードのラベルをコミットできるようにしたいということです。

役に立ちましたか?

解決

ノード ラベルの編集はテキスト ボックスで実行され、そのテキスト ボックスがフォーカスを失うと、名前の変更がノードの新しいラベルとしてコミットされます。したがって、クリックしている「保存」ボタンがフォーカスを取得すると、テキスト ボックスがフォーカスを失うため、自動的に更新が行われます。

「保存」ボタンがフォーカスを取得しない場合は、「保存」ボタンのクリック イベントを処理し、現在のラベル編集を終了するようにツリーに要求する必要があります。メソッド/プロパティがない場合は、呼び出してラベル編集の終了をリクエストできるため、2 つの選択肢があります。ツリー ビューにフォーカスがある場合は、別の場所にフォーカスを置きます。あるいは、ラベル編集を再度オフ/オンにします...

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

他のヒント

実際には文書化されていない場合でも、回答を受け入れます。そのような方法はありますか、それともありませんか?あなたは実際にはこれに答えず、ただ質問を私に返しただけです。

一方、他のコントロールにフォーカスを強制するという同じハックっぽい解決策を見つけました(あまりエレガントではありませんが、機能します)。ただし、UserControlの一部としてTreeViewを使用しているため、私にとっては少し難しくなります。

本当に保存ボタンが必要ですか?

たとえば、TreeView の KeyDown イベントの「return」キーをリッスンすることで、ノード編集の終了をリッスンできます。何かを編集している場合 (SelectedNode.IsEditing で調べます)、コミットがあることがわかります。次に、これを dataupdate にコミットできます。多くの異なるノードを編集し、最後にすべて保存できるようにしたい場合は、編集した各ノードを何らかのコレクションに追加し、保存ボタンをクリックすると、このコレクションを反復処理する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top