2008-10-08 16 views
12

Mam widok drzewa z węzłami takimi jak to: "Foo (1234)" i chcę umożliwić użytkownikowi zmianę nazwy węzłów, ale tylko część Foo, bez (1234). Po raz pierwszy starał się zmienić tekst węzła w BeforeLabelEdit tak:Pytanie do edycji etykiety TreeView

private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e) 
{ 
    e.Node.Text = "Foo"; 
} 

Ale gdy klikam węzeł do edycji, pojawi się „Foo (1234)” w polu tekstowym.

Dobra, to spróbujmy czegoś innego.

ustawić treeView1.LabelEdit false, a następnie wykonaj następujące czynności:

private void treeView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     if (treeView1.SelectedNode == treeView1.GetNodeAt(e.Location)) 
     { 
      treeView1.SelectedNode.Text = "Foo"; 
      treeView1.LabelEdit = true; 
      treeView1.SelectedNode.BeginEdit(); 
     } 
    } 
} 

a potem w AfterLabelEdit, ustawić LabelEdit z powrotem na false.

I zgadnij co? To też nie działa. Zmienia tekst węzła na "Foo", ale pole edycji nie pojawi się.

Wszelkie pomysły? Dzięki

Odpowiedz

4

Heh - uderzyłem ten jeden kilka lat temu. Opuściłem nawet suggestion on Connect (głosuj na to!), Aby umożliwić zmianę etykiety w BeforeLabelEdit.

Jedną z opcji (w WinForms - jest to inna historia w WPF) jest użycie niestandardowego malowania dla swoich TreeNodes, tak aby faktyczna etykieta nadal była "Foo", a ty niestandardowy narysuj "(1234)" po niej. To trochę kłopotliwe, ale dobrze.

+0

Dzięki za odpowiedź, postaram się to zrobić za pomocą niestandardowego malowania. I oczywiście głosowałem za Twoją sugestią :) – neo2862