Laden...

Wie kann ich Focus auf Textbox setzen?

Erstellt von c#atriga vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.180 Views
C
c#atriga Themenstarter:in
34 Beiträge seit 2018
vor 3 Jahren
Wie kann ich Focus auf Textbox setzen?

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;
                }
            }
        }
T
2.219 Beiträge seit 2008
vor 3 Jahren

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.

Doku

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.

P
441 Beiträge seit 2014
vor 3 Jahren

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.

190 Beiträge seit 2012
vor 3 Jahren

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

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

5.657 Beiträge seit 2006
vor 3 Jahren

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