Laden...

Im Switch für jedes Case eine art else ?

Erstellt von gh0st93 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.352 Views
G
gh0st93 Themenstarter:in
85 Beiträge seit 2014
vor 8 Jahren
Im Switch für jedes Case eine art else ?

Hallo c'#ler
Wollte mal fragen, wie ich es hinbekommen kann in einem Switch für jedes Case ebenfalls eine art else hinbekomme ?

In meiner Switchanweißung frage ich, welches Button gedrückt wurde und lass mir dessen Content anzeigen.

Wenn ich jedoch dan auf ein anderen Button drücke ist das vorherige noch sichtbar


private void setVisibleAdress(Object sender, RoutedEventArgs e)
            {

                Object ID = ((Button)sender).CommandParameter;

                List<Grid> ContentListAdress = new List<Grid>();
                ContentListAdress.Add(adressenKA);
                ContentListAdress.Add(adressenKAr);
                ContentListAdress.Add(adressenLA);
                ContentListAdress.Add(adressenBA);
                ContentListAdress.Add(adressenSGA);
                ContentListAdress.Add(adressenPA);
                ContentListAdress.Add(adressenPrA);
                ContentListAdress.Add(adressenEA);
                ContentListAdress.Add(adressenHF);

                foreach (Grid content in ContentListAdress)
                {

                    switch(ID.ToString())
                    {

                        case "adressenKA":
                            ContentListAdress[0].Visibility = Visibility.Visible;
                            break;

                        case "adressenKAr":
                            ContentListAdress[1].Visibility = Visibility.Visible;
                            break;

                        case "adressenLA":
                            ContentListAdress[2].Visibility = Visibility.Visible;
                            break;

                        case "adressenBA":
                            ContentListAdress[3].Visibility = Visibility.Visible;
                            break;

                        case "adressenSGA":
                            ContentListAdress[4].Visibility = Visibility.Visible;
                            break;

                        case "adressenPA":
                            ContentListAdress[5].Visibility = Visibility.Visible;
                            break;

                        case "adressenPrA":
                            ContentListAdress[6].Visibility = Visibility.Visible;
                            break;

                        case "adressenEA":
                            ContentListAdress[7].Visibility = Visibility.Visible;
                            break;

                        case "adressenHF":
                            ContentListAdress[8].Visibility = Visibility.Visible;
                            break;



                    } //Ende switch

                } //Ende foreach

            }

Ich wollte es 'gern' in nem Switch packen.
Vorher, als ich für jeden Button ein If, else hatte hat es eig gut geklappt. also


Object ID = ((Button)sender).CommandParameter;

                List<Grid> ContentListAdress = new List<Grid>();
                ContentListAdress.Add(adressenKA);
                ContentListAdress.Add(adressenKAr);
                ContentListAdress.Add(adressenLA);
                ContentListAdress.Add(adressenBA);
                ContentListAdress.Add(adressenSGA);
                ContentListAdress.Add(adressenPA);
                ContentListAdress.Add(adressenPrA);
                ContentListAdress.Add(adressenEA);
                ContentListAdress.Add(adressenHF);

                foreach (Grid content in ContentListAdress)
                {
if(ID.ToString()) == "adressenKA" { ContentListAdress[0].Visiblity = Visibility.Visible;} else {ContentListAdress[0].Visibility = Visibility.Hidden; }
// Und so weiter
}

Jemand eventuell ein Tipp ?

4.942 Beiträge seit 2008
vor 8 Jahren

Dein Code bezieht sich wohl auf deinen anderen Beitrag Ermitteln von welchem Button ich ausging. Und dort hat dir Palladin007 doch schon die Antwort gegeben - es sind also weder mehrere if-Anweisungen noch mehr case-Anweisungen nötig (dein bisheriger Code ist daher äußerst umständlich..).

In Code etwa so:


foreach (Grid content in ContentListAdress)
{
  contentVisibility = content == currentContent ? Visibility.Visible : Visibility.Hidden;
}

Du mußt jetzt nur noch currentContent passend setzen. Und dafür dann am besten statt der List ein Dictionary nehmen:


var contents = new Dictionary<string, Grid>()
{
    { "adressenKA", adressenKA },
    { "adressenKAr", adressenKAr },
    // ...
};

var currentContent = contents[ID];
// obige Schleife, nur ContentListAdress durch contents.Values ersetzen

Alternativ merkst du dir den aktiven Content (in einer Membervariablen) und deaktivierst dann diesen bevor du den neuen aktivierst.

G
gh0st93 Themenstarter:in
85 Beiträge seit 2014
vor 8 Jahren

Hallo nochmals.

ja, von Dictionarys hab ich offensichtlich keine ahnung <.<

Habe dein Code mal so ausprobiert, tuen tut sich nur leider nix 😦

PS: Hab dein code halt 1:1 übernommen.

Kannst du mir eventuell mal genau erklaeren, was ich da tuen soll?


var checkBtnClick = new Dictionary<String, Grid>()
            {
            
                {"Button1", grid1 },
                {"Button2", grid2 }
            
            };
            
            var currentContent = checkBtnClick[ID]; // Hier bei ID hab ich ID.ToString() probiert, nix getan, ID stehen lassen nix getan, den String so rein geschrieben nix getan <.<


            foreach(Grid content in checkBtnClick.Values)
            {

               Visibility ContentVisibility = content == currentContent ? Visibility.Visible : Visibility.Hidden;

            }

&#nd das dazu gehörige XML


<Button x:Name="Button1" Content="Button1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="10,10,0,0" Click="checkBtnClick" CommandParameter="Button1"/>
        <Button x:Name="Button2" Content="Button2" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="90,10,0,0" Click="checkBtnClick" CommandParameter="Button2"/>
        
        <Grid Margin="0,47,0,0" HorizontalAlignment="Left" Width="501" Background="#FFB4A3A3" Visibility="Hidden" x:Name="grid1"/>
        <Grid Margin="506,47,0,0" Background="#FFD66767" Visibility="Hidden"  x:Name="grid2"/>

16.842 Beiträge seit 2008
vor 8 Jahren

Du solltest MVVM verwenden, wenn Du mit WPF arbeitest.
Mit dem, so wie Du es gerade versuchst, wirst Du relativ schnell unglücklich und musst schmutzig arbeiten. Also von Beginn an so machen, wie es bei WPF gedacht ist: MVVM.

Und dass man von irgendwas keine Ahnung hat ist erstmal keine Ausrede.
Jeder hat mal bei Null angefangen aber dafür gibts ne Dokumentation und einen Debugger ( [Artikel] Debugger: Wie verwende ich den von Visual Studio? ) =)