Entwickler-Ecke
WinForms - Treeview mehrere selectedImageIndex als Liste
Chiyoko - Do 30.06.11 12:52
Titel: Treeview mehrere selectedImageIndex als Liste
Huhu,
Ich habe ungefähr 150 Treeview selectedImageIndexer und bei bestimmten Gruppen,
z.b. 1-10 soll ein Panel ein bzw ausgeblendet werden.
Ich möchte natuerlich redundanten Code vermeiden und hab es zuerst so versucht:
(aus dem Kopf ausgeschrieben, bin gerade nicht zu Hause)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| List<int> liste1 = new List<int>(); List<int> liste2 = new List<int>(); liste1.AddRange(new List[] { 1,2,3,4,5,6,7,8 }); liste2.AddRange(new List[] { 9,10,11,12,13 });
foreach(int list1 in liste1) |
Nun funktioniert das zwar untereinander geschrieben, aber nicht geschachtelt.
Die Frage ist, wo ich das hinschreiben soll, ohne tausend mal Panel.Show(); Panel.Hide(); aufzurufen?
Ich hoffe , das ist verständlich.Danke
Th69 - Do 30.06.11 13:05
Hallo Chiyoko,
nein, leider ist das (mir zumindestens) nicht verständlich genug.
Was hat die SelectedImageIndex-Eigenschaft mit dem Ein- und Ausblenden von Panels zu tun? Du meinst sicherlich das AfterSelect-Ereignis.
Chiyoko - Do 30.06.11 13:24
Ja richtig, das Ereignis ist die AfterSelect Methode.
In dieser definiere ich 2 Arrays(odr mehr) die dann eine Liste der vorhandenen Indexer beinhaltet.
Da das nun 2 Arrays sind, brauche ich 2 foreach schleifen in der selben Methode.
Nun, nehmen wir an, ich habe 2 Panel.Array 1 braucht Panel 1 und Array 2 braucht Panel 2.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| List<int> liste1 = new List<int>(); List<int> liste2 = new List<int>(); liste1.AddRange(new List[] { 1,2,3,4,5,6,7,8 }); liste2.AddRange(new List[] { 9,10,11,12,13 });
foreach(int list1 in liste1) { switch(e.Node.SelectedImageIndex) { case 1: Panel1.Show(); Panel2.Hide(); break; case 2: Panel1.Show();
} } foreach(int list2 in liste2) { } |
Veranschaulichst das etwas besser, was ich meine?
Ich möchte nicht jedes mal SHOW aufrufen.
Kann ich das nicht irgendwie global setzen?
Pseudocode:
WENN liste2
DANN Panel1.Show();Panel2.Hide();
WENN liste1
DANN Panel2.Show();Panel2.Hide();
Meine Versuche schlugen immer fehl und debuggen brachte nicht viel, weil er das selektieren überspringt.
(wird ja auch nichts angewaehlt in dem Moment)
Th69 - Do 30.06.11 14:56
Hallo Chiyoko,
ok, jetzt ist mir das etwas klarer ;-)
Du weißt aber schon, was Methoden sind, oder?
Packe die switch-Anweisung in eine eigene Methode und übergib die Liste sowie den Index als Parameter.
Und dann noch ein Tipp:
wenn du immer nur genau 1 Panel anzeigen willst, dann kannst du dir dieses in einer Membervariablen merken und einmalig Hide() dafür aufrufen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| private Panel currentPanel;
if (currentPanel != null) { currentPanel.Hide(); currentPanel = null; }
case 1: currentPanel = Panel1; break;
if (currentPanel != null) currentPanel.Show(); |
P.S: Trotzdem verstehe ich immer noch nicht, in wieweit SelectedImageIndex und die Listen im Verhältnis zueinander stehen (in deinem Code-Beispiel benutzt du ja gar nicht den Listen-Index 'list1')...
Chiyoko - Do 30.06.11 15:16
Ups, unglücklich formuliert:D
Aber du weist,was ich meine.In dem Fall war die Funktion gemeint mit dem Event.
Also....ich hasse Parameter...nagut, ich versuchs.
Danke fuer die Hinweise, mal schauen, wie weit ich komme.
Chiyoko - Do 30.06.11 15:26
Eine Frage ueberlesen, naja ich wollte damit den Index abfragen, etwa so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| List<int> test = new List<int>(); List<int> test2 = new List<int>(); foreach (int t in test) { if (treeView1.SelectedImageIndex == t) { pan_m.Show(); pan_s.Hide();
} } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!