myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Wie kann ich Focus auf Textbox setzen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich Focus auf Textbox setzen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
c#atriga
myCSharp.de-Mitglied

Dabei seit: 21.05.2018
Beiträge: 29


c#atriga ist offline

Wie kann ich Focus auf Textbox setzen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Habe folgende Textbox:

XML-Code:
<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:

C#-Code:
            CheckIsOnlyNumbers(anzahl.Text, anzahl.Name) ;

C#-Code:
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;
                }
            }
        }
09.04.2020 21:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.568
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist online Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 09.04.2020 22:13.

09.04.2020 22:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 285
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
09.04.2020 22:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Wilfried Wilfried ist männlich
myCSharp.de-Mitglied

avatar-1361.gif


Dabei seit: 21.07.2012
Beiträge: 66
Entwicklungsumgebung: Visual Studio 2017 (Prof)
Herkunft: Radeberg


Wilfried ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
10.04.2020 16:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.426
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
private int someNumber;
public int SomeNumber
{
  get { return someNumber; }
  set
  {
    someNumber = value;
    OnPropertyChanged(nameof(SomeNumber));
  }
}

Und diese Eigenschaft dann an eine Textbox bindet:

XML-Code:
<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.
14.04.2020 13:58 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Monate.
Der letzte Beitrag ist älter als 4 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.08.2020 12:36