geloescht_Henriette Geschrieben 20. März 2009 Geschrieben 20. März 2009 Hi Ich habe mal wieder eine Frage zu C#. Ich möchte mit Hilfe eines TreeView und druch Klicken der einzelnen Knoten diverse Methoden aufrufen. Ohne den "echten" Namen des Knotens anzugeben. Ich möchte folgenden Code so umschreiben, dass ich die Texte nicht statisch angebe: private void treeView1_Click(object sender, TreeViewEventArgs e) { if(treeView1.SelectedNode.Text == "Neu") { MessageBox.Show("Neu angeklickt"); neu(); } else if(treeView1.SelectedNode.Text == "Öffnen") { MessageBox.Show("Öffnen angeklickt"); oeffnen(); } else { MessageBox.Show("Beenden geklickt"); beenden(); } } Sondern eher so etwa wie es auch in Java gibt: public void actionPerformed(ActionEvent e) { if(e.getSource()==mitem1) { neu(); } else if(e.getSource()==mitem2) { oeffnen(); } else if(e.getSource()==mitem4) { beenden(); } } "mitem1" in C# wäre dann mein Knoten im TreeView "knotenNeu" (und nicht der Text des Knotens "Neu"). Hoffe ich habe mich verständlich ausgedrückt... Viele Grüße Henriette Zitieren
geloescht_Henriette Geschrieben 20. März 2009 Autor Geschrieben 20. März 2009 (bearbeitet) Vielleicht wird das ganze so verständlicher. Ich möchte nach der Variablen fragen die ausgewählt wurde. Nicht nach dem Inhalt der Variablen. (Wegen einer gewünschten sprachunabhängigkeit.) Im deutschen müßte ich auf "Neu" abfragen im englischen auf "New". Da ist die Variable "knotenNeu" schon besser. Liebe Grüße Henriette Bearbeitet 20. März 2009 von geloescht_Henriette Zitieren
LordHexa Geschrieben 20. März 2009 Geschrieben 20. März 2009 Hilft die vielleicht SelectedNode.Value weiter? Value sollte ja sprachunabhängig sein und somit immer gleich. Zitieren
posti123 Geschrieben 22. März 2009 Geschrieben 22. März 2009 public void tree_NodeMouseDoubleClick(object e, TreeNodeMouseClickEventargs f) // Obersten Knoten angeklickt if(f.Node.Parent == null) { MessageBox.Show(f.Node.Name.ToString()); } // Unterknoten angeklickt if(f.Node.Parent != null) { MessageBox.Show(f.Node.Parent.Name.ToString() + " " + f.Node.Name.ToString()); } Zitieren
geloescht_Henriette Geschrieben 23. März 2009 Autor Geschrieben 23. März 2009 (bearbeitet) Mit f.Node.Name.ToString() bekomme ich zwar den Knoten, welchen ich angeklickt habe. Aber ich möchte nun wissen ob es der von mir gesuchte ist. Und hier habe ich das Problem. Ich möchte folgendes abfragen: public void tree_NodeMouseDoubleClick(object e, TreeNodeMouseClickEventargs f) { if (f.Node.Name == gesuchterKnoten_1) { //Aufruf Programm 1 } else if (f.Node.Name == gesuchterKnoten_2) { //Aufruf Programm 2 } } Wenn ich auf "gesuchterKnoten_1" abfragen möchte, bekomme ich folgende Meldung: Der Name "gesuchterKnoten_1" ist im aktuellen Kontext nicht vorhanden. Was muss ich nun nach dem "==" in der if-Anweisung schreiben, wenn ich NICHT nach dem Wert des Knotens fragen will sondern nach dem Variablennamen des Knotens. Hoffe Ihr könnt mir helfen... Bearbeitet 23. März 2009 von geloescht_Henriette Zitieren
Guybrush Threepwood Geschrieben 23. März 2009 Geschrieben 23. März 2009 Ich möchte nach der Variablen fragen die ausgewählt wurde. Nicht nach dem Inhalt der Variablen. Dazu müsstest ja extra nochmal irgendwo anders einen Vergleichsknoten haben oder genau wiesen wo der Knoten in deinem Tree liegt. Du musst dir halt irgendwas überlegen womit du deine Knoten eindeutig identifizieren kannst und das schönste dazu ist das schon angesprochene Value Property des Knoten. Hier kannst du einen beliebigen Wert ablegen und später danach abfragen Zitieren
geloescht_Henriette Geschrieben 23. März 2009 Autor Geschrieben 23. März 2009 Dazu müsstest ja extra nochmal irgendwo anders einen Vergleichsknoten haben oder genau wiesen wo der Knoten in deinem Tree liegt. Du musst dir halt irgendwas überlegen womit du deine Knoten eindeutig identifizieren kannst und das schönste dazu ist das schon angesprochene Value Property des Knoten. Hier kannst du einen beliebigen Wert ablegen und später danach abfragen Ich programmiere normalerweise in Java. Da definiere ich einfach ein Objekt auf das ich dann immer zugreifen kann. Sobald ich dieses dann auswähle wird ein Event ausgelöst und ich kann das Objekt abfragen. Sehr einfach das ganze. JMenuItem mitem1 = new JMenuItem(XML.btNeu); JMenuItem mitem2 = new JMenuItem(XML.btOeffnen); JMenuItem mitem3 = new JMenuItem(XML.btBeenden); ... public void actionPerformed(ActionEvent e) { if(e.getSource()==mitem1) { neu(); } else if(e.getSource()==mitem2) { oeffnen(); } else if(e.getSource()==mitem3) { beenden(); } } Dachte bei C# ist das genauso leicht... Zitieren
geloescht_Henriette Geschrieben 23. März 2009 Autor Geschrieben 23. März 2009 Ich löse das ganze nun wie folgt. (Auch wenn mir der Code nicht sonderlich gefällt.) private void treeView1_Click(object sender, TreeViewEventArgs e) { if (e.Node.Name.ToString().Equals("knoDatPruef")) { //Aufruf Programm fuer knoDatPruef } else if (e.Node.Name.ToString().Equals("knoDatPruef_NEU")) { //Aufruf Programm fuer knoDatPruef_NEU } else if (... } Vielen Dank an alle. Zitieren
Guybrush Threepwood Geschrieben 23. März 2009 Geschrieben 23. März 2009 (bearbeitet) Dachte bei C# ist das genauso leicht... Das hat nichts mit C# oder Java zu tun. Wenn du dir ein TreeNode Object irgendwo anlegst kannst du natürlich darauf vergleichen. Aber schön ist das nicht weil du das Objekt nicht wirklich brauchst. PS: Theoretisch könntest du auch ein delegate auf den Aufruf der jeweiligen Methode in das Tag Property des TreeNiodes legen und dann einfach aufrufen. Aber so schön fänd ich das jetzt auch nicht... Bearbeitet 23. März 2009 von Guybrush Threepwood Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.