afterlabeledit обработчик дерева просмотра c # - PullRequest
4 голосов
/ 30 декабря 2010

Мне нужно, основываясь на том, что пользователь написал в издании метки узла, переписать эту метку другим текстом. Пример, если пользователь написал «NewNodeName», я хочу, чтобы текст узла после завершения издания был «S: NewNodeName». Я пробую эти два кода, и я не знаю, почему ни один из них не работает

  private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
    {
        e.Node.Text = "S :"+ e.Label;
    }

, а также:

        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
    {
        treeView1.SelectedNode.Text = "S :"+ e.Label;
    }

Ответы [ 2 ]

6 голосов
/ 30 декабря 2010

Да, не работает, свойство Text получает значение метки после этого события. Вот почему e.Cancel работает. Поэтому назначенное вами текстовое значение будет снова перезаписано кодом, который запускается после возникновения этого события. Код внутри родного элемента управления Windows.

Нет события AfterAfterLabelEdit, и вы не можете изменить e.Label в обработчике событий, вам нужен хитрость Измените свойство Text после , когда событие перестало выполняться. Элегантно сделано с помощью Control.BeginInvoke (). Как это:

    private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
        this.BeginInvoke((MethodInvoker)delegate { e.Node.Text = "S: " + e.Node.Text; });
    }
2 голосов
/ 11 августа 2013

Уже довольно поздно, чтобы ответить на этот вопрос, но вот другое решение:

1) Удалите часть, которую вы не хотите, чтобы пользователь не редактировал, надписью узла прямо перед вызовом BeginEdit ()

2) В AfterLabelEdit () установите текст узла так, как вы хотите, и установите NodeLabelEditEventArgs.CancelEdit = true, чтобы пользовательский ввод текста не заменял текст, который вы установили

private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if (e.Node == null) return;
    e.Node.Text = e.Node.Text.Substring(3, e.Node.Text.Length - 3);
    e.Node.BeginEdit();
}
private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    e.Node.Text = "S :" + e.Label;
    e.CancelEdit = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...