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 ?
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.
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"/>
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? ) =)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code