Habe folgende Textbox:
<TextBox Name="anzahl" Height="20" Width="50" Margin="2" Text="10"/>
Mithilfe einer Methode überprüfe ich nun ob nur Zahlen in der Textbox sind. Sollte dies nicht der Fall sein, so kommt eine Messagebox und eigentlich sollte dann der Focus auf die Textbox fallen. Dafür übergebe ich den Namen der Textbox in der Methode mit.
Wo liegt jetzt mein Fehler, da mir Focus als Eigenschaft gar nicht angezeigt wird.
Methodenaufruf:
CheckIsOnlyNumbers(anzahl.Text, anzahl.Name) ;
private void CheckIsOnlyNumbers(string text , object name )
{
for (int i = 0; i < text.Length; i++)
{
if (!char.IsNumber(text, i))
{
MessageBox.Show("Im Feld sind nur Zahlen erlaubt, bitte koorigieren");
return;
}
}
}
Laut Doku kannst du dies per Methode Focus() machen.
Ebenfalls solltest du die Zeichen nicht einzeln parsen, nimmt hier z.B. Int32.TryParse um den gesamten Text in einem Rutsch parsen zu lassen.
Nachtrag:
An deiner Stelle würde ich auch nicht den Text und Namen des Controls übergeben, sondern das Control selbst.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
WPF verfügt über Validierungsstrategien in Zusammenhang mit Databinding.
Das würde dir einiges an Arbeit abnehmen und die Arbeit mit der UI konsistenter machen.
Hallo c#atriga,
einen Fehler durch eine Messagebox zu melden, würde mich als Nutzer sehr stören.
Schau mal hier: Validieren von Bindungen
Ein Beispiel gibt es hier: WPF und MVVM richtig einsetzen - Teil 3
Im besten Fall designt man die Benutzerschnittstelle so, daß gar keine Validierungsfehler auftreten können. Hier würde man ein Steuerelement verwenden, welches nur die Eingabe von Zahlen zuläßt.
Mit WPF geht das denkbar einfach, indem man im ViewModell eine Eigenschaft mit dem korrekten Datentyp (int
oder decimal
) erstellt:
private int someNumber;
public int SomeNumber
{
get { return someNumber; }
set
{
someNumber = value;
OnPropertyChanged(nameof(SomeNumber));
}
}
Und diese Eigenschaft dann an eine Textbox bindet:
<TextBox Text="{Binding SomeNumber}" />
Für mehr Komfort gibt es auch IntegerUpDown u.ä. Controls im Extended WPF Toolkit, mit dem man z.B. den Wertebereich begrenzen kann.
Fall trotzdem eine nachträgliche Validierung nötig sein sollte, siehe die Links von Wilfried.
Weeks of programming can save you hours of planning