5

ユーザーが新しいツリーノードを作成できるようにするツリービューがあります。彼らがツリーノードを作成すると、私は自動的に編集モードに入ります。私がやろうとしているのは、「AfterLabelEdit」で編集が終了した後にツリーノードに付けられた名前を保存することです。

私が見つけたのは、このメソッドでラベルをチェックすると、メソッドが終了するまでツリーにコミットされていないように見えるため、元のラベルが返されることです。

編集が行われた後、どうすれば新しいラベルを取得できますか?このメソッドで変更を強制的にコミットする方法はありますか?

それが理にかなっていることを願っています!

4

2 に答える 2

20

実際のノードテキストは、AfterLabelEventイベントが完了するまで変更されません。イベントは、e.Labelプロパティで新しいラベルテキストを渡します。それはあなたが望むものです。

不安定なTreeViewイベントを処理するための標準的なトリックは、イベントが完了するまでアクションを遅らせることです。Control.BeginInvoke()メソッドを使用してエレガントに実行します。

    private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
        this.BeginInvoke(new Action(() => afterAfterEdit(e.Node)));
    }
    private void afterAfterEdit(TreeNode node) {
        string txt = node.Text;   // Now it is updated
        // etc..
    }
于 2012-04-28T15:51:25.183 に答える
2

System.Windows.Forms.NodeLabelEditEventArgseからe.Labelを使用します

private void treeView1_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
{
    if (e.Label != null)
    {
     ........
    }
}

http://msdn.microsoft.com/en-us/library/system.windows.forms.nodelabelediteventargs.label.aspx

于 2013-02-13T22:02:25.633 に答える