WPF: Formularfelder
Zu den Steuerelementen für Formulare gehören CheckBox, RadioButton, GroupBox, ComboBox, TextBox, PasswordBox und Button. Die TextBox und PasswordBox haben wir ja bereits kennengelernt. Die anderen wollen wir Ihnen nun vorstellen.
Die CheckBox stellt ein Kontrollkästchen zur Verfügung. Die Eigenschaft Content legt den Beschriftungstext fest, welcher rechts vom Kontrollkästchen angezeigt wird. Über die Eigenschaft IsChecked kann abgefragt oder festgelegt werden, ob die CheckBox ausgewählt ist oder nicht. Als Datentyp wird ein nullable bool (Datentyp-Darstellung als Nullable
Der RadioButton ist ein Auswahlkästchen, welches zusammen mit anderen RadioButton-Steuerelementen verwendet wird, um eine einzelne Auswahl von mehreren Möglichkeiten zu treffen. Auch bei dem RadioButton gibt es die Eigenschaft IsChecked und IsThreeState und die Ereignisse Checked und Unchecked. Wollen wir mehrere Gruppen von RadioButton-Steuerelementen benutzen, so benötigen wir die Möglichkeit, diese Steuerelemente zu gruppieren. Hierfür können wir, wie auch bei Windows Forms, die GroupBox benutzen oder aber die Gruppierung mit Hilfe der Eigenschaft GroupName durchführen. Bei letzterem müssen alle RadioButton-Steuerelemente, welche gruppiert werden sollen, den gleichen Namen in der Eigenschaft GroupName aufweisen.
Die ComboBox stellt uns eine Auswahlliste in Form einer Drop-Down-Liste dar. Hierfür werden dem ComboBox-Element, ComboBoxItem-Elemente verschachtelt, welche als Auswahl angezeigt werden sollen. Dem ComboBoxItem wird über die Eigenschaft Content der Name der Auswahlmöglichkeit zugewiesen. Die Eigenschaft SelectedIndex legt den Index der ausgewählten Auswahl fest oder ruft diesen ab. Über die Eigenschaft Items können wir auch programmiertechnisch auf die Liste der Auswahlmöglichkeiten zugreifen.
Der Button dient für das gewollte Auslösen eines Ereignisses durch den Benutzer. Dafür wird das Click-Event verwendet. Über die Eigenschaft Content können wir den Titel des Buttons festlegen.
MainWindow.xaml
<CheckBox Margin="20,20,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Name="checkBoxGroupA" Content="Gruppe A aktivieren" Checked="checkBoxGroupA_CheckedChanged" Unchecked="checkBoxGroupA_CheckedChanged" /> <GroupBox VerticalAlignment="Top" HorizontalAlignment="Left" Margin="30,50,0,0" Width="125" Header="Gruppe A" Name="groupBoxA"> <Grid> <RadioButton VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,10,0,0" IsEnabled="False" Name="radioButtonA1" Content="Auswahl A.1" IsChecked="True" /> <RadioButton VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,30,0,0" IsEnabled="False" Name="radioButtonA2" Content="Auswahl A.2" /> <RadioButton VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,50,0,0" IsEnabled="False" Name="radioButtonA3" Content="Auswahl A.3" /> </Grid> </GroupBox> <GroupBox VerticalAlignment="Top" HorizontalAlignment="Left" Margin="180,50,0,0" Width="200" Header="Gruppe B"> <Grid> <TextBox VerticalAlignment="Top" HorizontalAlignment="Left" Margin="30,30,0,0" Name="textBoxEingabe" Width="125" TextChanged="textBoxEingabe_TextChanged" /> <PasswordBox VerticalAlignment="Top" HorizontalAlignment="Left" Margin="30,80,0,0" Name="passwordBoxEingabe" Width="125" PasswordChar="*" IsEnabled="False" /> <!-- Anordnung verändert, da das Checked-Event das Event auslösen würde, bevor die Textfelder bekannt sind --> <RadioButton VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,10,0,0" Name="radioButtonText" Content="Text-Eingabe" Checked="radioButtonGroupB_Checked" IsChecked="True" /> <RadioButton VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,60,0,0" Name="radioButtonPassword" Content="Passwort-Eingabe" Checked="radioButtonGroupB_Checked" /> </Grid> </GroupBox> <ComboBox VerticalAlignment="Top" HorizontalAlignment="Left" Margin="20,150,0,0" Width="120" SelectedIndex="1" Name="comboBoxAuswahl"> <ComboBoxItem Content="Auswahl 1" /> <ComboBoxItem Content="Auswahl 2" /> <ComboBoxItem Content="Auswahl 3" /> </ComboBox> <Button VerticalAlignment="Top" HorizontalAlignment="Left" Margin="290,180,0,0" FontWeight="Bold" Content="Info anzeigen" Click="Button_Click" />
MainWindow.xaml.cs
private void checkBoxGroupA_CheckedChanged(object sender, RoutedEventArgs e) { radioButtonA1.IsEnabled = radioButtonA2.IsEnabled = radioButtonA3.IsEnabled = checkBoxGroupA.IsChecked.Value; if (checkBoxGroupA.IsChecked.Value) checkBoxGroupA.Content = "Gruppe A deaktivieren"; else checkBoxGroupA.Content = "Gruppe A aktivieren"; } private void radioButtonGroupB_Checked(object sender, RoutedEventArgs e) { if (radioButtonText.IsChecked.Value) textBoxEingabe.IsEnabled = true; else textBoxEingabe.IsEnabled = false; passwordBoxEingabe.IsEnabled = !textBoxEingabe.IsEnabled; } private void textBoxEingabe_TextChanged(object sender, TextChangedEventArgs e) { passwordBoxEingabe.Password = textBoxEingabe.Text; } private void Button_Click(object sender, RoutedEventArgs e) { string sInfoAusgabe = "Informationen zum Formular:\r\n"; if (checkBoxGroupA.IsChecked.Value) { sInfoAusgabe += "- CheckBox für Gruppe A ausgewählt\r\n"; if (radioButtonA1.IsChecked.Value) sInfoAusgabe += " > Radio-Button 1\r\n"; else if (radioButtonA2.IsChecked.Value) sInfoAusgabe += " > Radio-Button 2\r\n"; else if (radioButtonA3.IsChecked.Value) sInfoAusgabe += " > Radio-Button 3\r\n"; } if (radioButtonText.IsChecked.Value) sInfoAusgabe += "- Gruppe B: Text-Eingabe\r\n"; else sInfoAusgabe += "- Gruppe B: Passwort-Eingabe\r\n"; sInfoAusgabe += "- DropDown-Liste: Index " + comboBoxAuswahl.SelectedIndex; MessageBox.Show(sInfoAusgabe, "Formular-Info", MessageBoxButton.OK, MessageBoxImage.Information); }