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 oder als bool?) verwendet, wodurch die Zuweisung des Werts null erlaubt ist. Alle „einfachen“ Datentypen die nullable sind, können nicht direkt umgewandelt werden. Hierfür können wir die Eigenschaft Value des Datentyp-Objekts nutzen. Es gilt jedoch zu beachten, dass eine Exception ausgelöst wird, wenn der Wert des Objekts null ist. Wollen wir dies abfangen, müssen wir die Eigenschaft HasValue abfragen bzw. eine Abfrage, ob der Wert null ist, durchführen. Doch warum wird überhaupt eine nullable bool verwendet? Der Grund ist, dass die CheckBox einen dritten Status unterstützt (nur falls IsThreeState auf true gesetzt ist). In diesem Fall wird kein Häkchen in der CheckBox, sondern eine gefüllte CheckBox angezeigt. Ist dies der Fall, so entspricht der Wert von IsChecked null. Im Gegensatz zu Windows Forms gibt es als Ereignis nicht das Event CheckedChanged, sondern die Ereignisse Checked und Unchecked. Diese Aufteilung der Ereignisse ist für einige Fälle sehr praktisch, für andere hingegen weniger. Zumeist ist es jedoch ein Vorteil, andernfalls kann natürlich für beide Ereignisse die gleiche Event-Funktion registriert werden (siehe Beispiel).
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);
}
Download

LinksRechts