Frage

Ich habe ein Benutzersteuerelement, das besteht aus drei Textfelder.Auf eine form, die ich haben kann, ein oder mehr, oder mein UserControl.Ich umsetzen will, mein eigenes tab-Verhalten, so dass, wenn der Benutzer die Taste Tab in das zweite Textfeld, ich sollte nur den übergang zur Dritten TextBox, wenn die das zweite Textfeld etwas eingegeben.Wenn nichts eingegeben, in das zweite Textfeld der nächsten Kontrolle der form sollte Fokus erhalten, wie pro die Registerkarte normal Verhalten.Wenn der Benutzer noch nicht eingegeben alles in der ersten oder zweiten Textfeld ein und drückt die tab-es ist dieser Besondere Fall, wo ein Steuerelement auf dem Formular sollte übersprungen werden.

Mithilfe der ProcessDialogKey ich habe es geschafft, es funktioniert irgendwie ok, aber ich habe immer noch ein problem.Meine Frage ist ob es einen Weg gibt zu erkennen, wie ein WinForms-Steuerelement bekam konzentrieren, da würde ich auch gerne wissen, ob das mein UserControl habe der Fokus von einem Tab oder Umschalt + Tab und dann tun Sie meine seltsame Sachen, aber wenn der Benutzer auf das Steuerelement, die ich nicht wollen, etwas besonderes zu tun.

War es hilfreich?

Lösung

Als eine Allgemeine Regel, ich würde sagen, das überschreiben der standard-Verhalten der TAB-Taste wäre eine schlechte Idee.Vielleicht können Sie etwas tun, wie das deaktivieren der 3. Textfeld, bis eine gültige Eingabe in das 2. Textfeld.

Jetzt, nachdem dies gesagt ist, habe ich auch diese Regel gebrochen auf Wunsch des Kunden.Wir machten die enter-Taste Funktion wie die tab-Taste, wo Sie die enter-Taste würde, speichern Sie den Wert in einem Textfeld aus, und fahren Sie den cursor auf das nächste Feld.

Andere Tipps

Ich glaube nicht, dass es eine integrierte Möglichkeit, dass Sie es tun könnte.Alle WinForms-Fokus-Ereignisse (GotFocus,LostFocus,Enter,Leave) werden mit leeren EventArgs-Parameter, die nicht geben Ihnen zusätzliche Informationen.

Persönlich würde ich deaktivieren Sie die Dritte textbox, als Rob Thomas sagte.Wenn Sie entschlossen sind, dies zu tun, aber es würde nicht schwierig sein zu set up ein Handbuch (Lesen Sie:hackish) Lösung.Sobald Sie die tab-Taste ist gedrückt (wenn sich der Fokus auf das zweite Textfeld), legen Sie eine variable in Ihrem Formular.Wenn das nächste Objekt fokussiert ist dann das Dritte Textfeld, dann wissen Sie genau, wie es passiert ist.

Der Grund für diese sonderbare tab-Verhalten ist alles über Geschwindigkeit in der Eingabe-Prozess.Es war wirklich gut, input, ich hatte nicht gedacht, das deaktivieren einer textbox, aber das könnte tatsächlich funktionieren.Aber mit der Enter-Taste, um die Eingabe zu übernehmen, noch nicht einmal in den Sinn gekommen.Das funktioniert so viel besser.Die Benutzer können geben Sie die zahlen und dann drücken Sie enter, um die Eingabe zu übernehmen und die nächsten möglichen Textfeld aktiv ist.Es ist wie mit dem Kuchen und Essen es auch, Der speed factor ist es da, wenn mit der enter-Taste keine unnötigen tabing getan werden muss, um den richtigen Bereich und mit der enter-Taste neben der numerischen Tastatur macht es wirklich glatt.

Vielen Dank für den input!

Ich Stimme mit DannySmurf.Messing mit der tab-Reihenfolge geben könnte Sie die Hölle später dann, wenn die Anforderungen für die Anwendung ändern.

Eine andere Sache, die Sie tun könnten, ist zu implementieren, die eine Art Zauberer für die Benutzer durch zu gehen.

Besser als das deaktivieren von Steuerelementen, versuchen monkeying um mit TabStop - wenn der Wert false ist, wird das Steuerelement werden einfach übersprungen, wenn die Tab.

Ich würde auch vorschlagen, dass das Changed-Ereignis der TextBox ist der Ort, um die Aktualisierung TabStop auf der anderen steuert.

Ich habe etwas ähnliches gemacht, um diese mit einem login-Steuerelement, wo Benutzer könnte geben Sie entweder ein Benutzername oder ein E-Mail-Adresse (in getrennten Bereichen), und Ihre Passwort, und tabStop ist, was ich verwendet, um den job zu erledigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top