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
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
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.
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()); }
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
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
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...
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden