Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Do 30.06.11 12:52 
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)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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.

ausblenden 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:
           // lade i-was
           Panel1.Show();
           Panel2.Hide(); //????
           break;
        case 2:
           // lade i-was
           Panel1.Show();

    }
}
foreach(int list2 in liste2)
{
   // das selbe wie oben, nur mit dem anderen Array

}


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
private Panel currentPanel;

// in der Methode
if (currentPanel != null)
{
   currentPanel.Hide();
   currentPanel = null;
}

// switch-case: nur noch das neu anzuzeigende Panel zuweisen
   case 1:
      currentPanel = Panel1;
      break;

// unterhalb der switch-Anweisung
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Do 30.06.11 15:26 
Eine Frage ueberlesen, naja ich wollte damit den Index abfragen, etwa so:

ausblenden 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();

                    }
                    
                }