Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kampf um den Focus

4 views
Skip to first unread message

Julia M

unread,
Sep 22, 2009, 6:19:08 AM9/22/09
to
Hi,

Dieses Problemchen ist sowohl in Winforms als auch WPF reproduzierbar.
In WinForms nehme man 1 Button, 2 CheckBoxen und 2 TextBoxen, ordne
sie so an:

[checkbox1] [textbox1]
[checkbox2] [textbox2]
[button]

und kopiere folgenden Code

public Form1() {
InitializeComponent();
textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp);
textBox2.KeyUp += new KeyEventHandler(textBox2_KeyUp);
}
void textBox1_KeyUp(object sender, KeyEventArgs e) {
if (e.KeyCode != Keys.Enter) return;
textBox2.Focus();
}
void textBox2_KeyUp(object sender, KeyEventArgs e) {
if (e.KeyCode != Keys.Enter) return;
button1.Focus();
}
private void button1_Click(object sender, EventArgs e) {
textBox1.Focus();
}

Alsdann klicke man mäusisch auf den button und der Focus springt in
TextBox1 - wunderbar.
Ein Druck auf Enter bringt einen zu TextBox2 und von da aus auf
dieselbe Weise zurück zum Button.

Nun drücke man auch hier auf Enter, um den Button auszulösen ... und
der Focus springt in TextBox2 - Mist!

Ziel der Übung ist es, zwecks benutzerfreundlicherer Eingabe, mit der
Entertaste einige Controls (z.B. hier die CheckBox) zu überspringen,
da diese nur dazu dienen anfängliche Einstellungen vorzunehmen, die
bei allen weiteren Eingaben bestehenbleiben und es vom Arbeitsablauf
her unsinnig wäre, sie jedesmal anzuspringen.

In VB6 hat dies immer wunderbar funktioniert - nur .net bzw WPF
scheint den Druck auf die Entertaste mit Aktivierung des Buttons nicht
zu "vergessen" und löst noch einmal zusätzlich KeyUp in TextBox1 aus,
sobald sie den Focus erhält und damit sofort an TextBox2 durchreicht.
Wie stelle ich diesen Unsinn ab?
e.Handled fühlt sich anscheinend nicht zuständig :-(

Danke

Ulf [Kado] Kadner

unread,
Sep 22, 2009, 7:53:02 AM9/22/09
to
Hallo Julia M! Du schriebst folgendes:

> Alsdann klicke man m�usisch auf den button und der Focus springt in


> TextBox1 - wunderbar.
> Ein Druck auf Enter bringt einen zu TextBox2 und von da aus auf

> dieselbe Weise zur�ck zum Button.
>
> Nun dr�cke man auch hier auf Enter, um den Button auszul�sen ... und


> der Focus springt in TextBox2 - Mist!

Und wenn Du mal Enter gedr�ckt h�lst w�rend die Schaltfl�che den Fokus
hat wirst Du feststellen das der Fokus zu Textfeld 1 spring und erst
beim Loslassen zu textbox 2 h�pft.

M�glichweweise schaffst Du es jetzt bereits von allein herauszufinden wo
Dein Problem liegt.

Wenn nicht:
Du hast das unpassendste Ereignis gebunden. Besser:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar != 13) textBox2.Focus();
}

und nat�rlich auch f�r textBox2

MfG, Ulf

Julia M

unread,
Sep 22, 2009, 8:19:53 AM9/22/09
to
Boah... mal wieder im Wald gestanden
Danke für die schnelle Aufklärung X-)

Aber warum ist dasselbe nicht beim Wechsel von TextBox1 nach TextBox2
passiert?

Ulf [Kado] Kadner

unread,
Sep 22, 2009, 9:55:39 AM9/22/09
to
Hallo Julia M! Du schriebst folgendes:
> Boah... mal wieder im Wald gestanden
> Danke f�r die schnelle Aufkl�rung X-)

>
> Aber warum ist dasselbe nicht beim Wechsel von TextBox1 nach TextBox2
> passiert?
>

Der Buttun verarbeitet das KeyUp nicht. Nach dem
Bet�tigen von <Enter> wenn der Button den Fokus hat wird Clicked
ausgel�st was daf�r sorgt das textbox1 den Focus bekommt.

Jetzt hat die Textbox den Fokus aber Du hast im selben Moment noch nicht
die <Enter> Taste losgelassen. Wenn Du diese Losl�st dann erst wenn
Textbox1 den Fokus hat was dann wiederum das KeyUp Ereignis der Textbox1
ausl�st.

MfG, Ulf

Ulf [Kado] Kadner

unread,
Sep 22, 2009, 10:06:04 AM9/22/09
to
Ulf [Ingrid] Kadner schrieb:

> Der Buttun verarbeitet das KeyUp nicht. Nach dem
> Bet�tigen von <Enter> wenn der Button den Fokus hat wird Clicked
> ausgel�st was daf�r sorgt das textbox1 den Focus bekommt.
>
> Jetzt hat die Textbox den Fokus aber Du hast im selben Moment noch nicht
> die <Enter> Taste losgelassen. Wenn Du diese Losl�st dann erst wenn
> Textbox1 den Fokus hat was dann wiederum das KeyUp Ereignis der Textbox1
> ausl�st.

Ich will hier nochwas anmerken. Das Verhalten was Du implementieren
willst wiederspricht dem vom Nutzer eigentlich gewohnten und erwarteten
UI-Verhalten!

Normalerweise wechselt man mit der <Tab> Taste zwischen Eingabefeldern.
Gerad wenn im Controlensemble der Form eine Schaltfl�che (oder mehrere)
enthalten ist, so erwarte ich das Bei einem Enter eine Schaltfl�che
bet�tigtwird, egal welches Control gerad den Fokus hat. So kenne ich es
von zahlreichen anderen Anwendungen und w�r sicher Entt�uscht wenn das
auf einmal in einer Anwendung anders w�r.

MfG, Ulf

Julia M

unread,
Sep 22, 2009, 10:22:33 AM9/22/09
to
On Sep 22, 4:06 pm, "Ulf [Kado] Kadner" <dr_lo...@gmx.net> wrote:

> Ich will hier nochwas anmerken. Das Verhalten was Du implementieren
> willst wiederspricht dem vom Nutzer eigentlich gewohnten und erwarteten
> UI-Verhalten!

Glaub mir, Du wärest enttäuscht, _wenn_ es in dieser Anwendung - die
Du in ihrem vollen Umfang nicht kennst - so wäre.
Das würde Dich nämlich elendig Zeit kosten, ständig über Checkboxen
etc hinwegzutabben oder "blinde" Eingaben ins völlig falsche Control
zu setzen.
Wer "mittendrin" feststellt, daß er die Voreinstellungen ändern
möchte, benutzt eben die Tab-Taste, um doch zu einer - der jeweiligen
TextBox zugeordneten - Checkbox weitergeleitet zu werden.
Die Voreinstellung bestimmen übrigens u.a., ob ein eingetragener Wert
nach dem Abschicken aus dem Formular gelöscht wird oder nicht. Das
spart Zeit bei der Eingabe vieler ähnlicher Bezeichnungen.
Da außerdem so gut wie alle Felder Pflichteingaben sind, wäre es dazu
auch noch unsinnig, z.B. aus dem ersten Feld heraus einen Default-
Button zu betätigen.

_Diese_ Lösung paßt durchaus zu _diesem_ Problem.

Ulf [Kado] Kadner

unread,
Sep 23, 2009, 7:20:24 AM9/23/09
to
Hallo Julia M! Du schriebst folgendes:

> Glaub mir, Du w�rest entt�uscht, _wenn_ es in dieser Anwendung - die
> Du in ihrem vollen Umfang nicht kennst - so w�re.

Wenn Du es sagst... :-)

> Das w�rde Dich n�mlich elendig Zeit kosten, st�ndig �ber Checkboxen
> etc hinwegzutabben oder "blinde" Eingaben ins v�llig falsche Control
> zu setzen.

OK, aber dabit doktorst Du lediglich an den Symptomen die ein anderes
Problem erst verursacht. Ich bin hier der Meinung das Nutzerinterfaces
die so weit mit Elementen zu Nutzerinteraktion �berladen sind, das
derartige Dinge eine Rolle spielen k�nnen, einfach mal sehr ung�nstig
entworfen wurden.

Siehe dazu z.B.

[Richtlinien zur Entw. einer tastaturgesteuerten Benutzeroberfl�che]
http://msdn.microsoft.com/de-de/library/ms971323.aspx

> _Diese_ L�sung pa�t durchaus zu _diesem_ Problem.

Ja und hast Du denn auch meine Erkl�rung verstanden warum Dein Problem
mit dem Dir unerkl�rlichen Fokusverlust entstanden ist?

MfG, Ulf

Julia M

unread,
Sep 23, 2009, 7:57:10 AM9/23/09
to
On Sep 23, 1:20 pm, "Ulf [Kado] Kadner" <dr_lo...@gmx.net> wrote:
> Ich bin hier der Meinung das Nutzerinterfaces
> die so weit mit Elementen zu Nutzerinteraktion überladen sind

Das Interface ist _nicht_ überladen - wäre mit einer Handvoll Check-
und Textboxen und einem Button auch wirklich schwer zu
bewerktstelligen. Es ist einfach nur für eine möglichst effektive
Dateneingabe (und wir reden hier von ein paar Dutzend Datensätzen am
Stück) optimiert, die sich in dieser Form im betreffenden Programm
seit Jahren bewährt hat.

> Ja und hast Du denn auch meine Erklärung verstanden warum Dein Problem
> mit dem Dir unerklärlichen Fokusverlust entstanden ist?

Ja.


Ulf [Kado] Kadner

unread,
Sep 23, 2009, 8:14:41 AM9/23/09
to
Hallo Julia M! Du schriebst folgendes:

> Das Interface ist _nicht_ �berladen - w�re mit einer Handvoll Check-


> und Textboxen und einem Button auch wirklich schwer zu
> bewerktstelligen.

OK. Mach was Du willst. Wenn der Wink mit dem Zaunspfahl nicht
funktioniert solls halt nicht sein! :-)

>> Ja und hast Du denn auch meine Erkl�rung verstanden warum Dein Problem


>> mit dem Dir unerkl�rlichen Fokusverlust entstanden ist?
>

> Ja.

OK, bitte.

MfG, Ulf

Julia M

unread,
Sep 23, 2009, 8:45:47 AM9/23/09
to
On Sep 23, 2:14 pm, "Ulf [Kado] Kadner" <dr_lo...@gmx.net> wrote:
> OK. Mach was Du willst. Wenn der Wink mit dem Zaunspfahl nicht
> funktioniert solls halt nicht sein! :-)

Fein. Treffen wir uns morgen um 6 hinter der Windmühle am See und
machen ein Eingabeduell. Die Waffen sind ja bereits festgelegt. Du an
der Tab-Morstetaste, ich an der Entertaste. Der Verlierer schneidet
dem Gewinner die Fußnägel. ;-)

Ulf [Kado] Kadner

unread,
Sep 23, 2009, 2:02:23 PM9/23/09
to
Hallo Julia M! Du schriebst folgendes:

> Fein. Treffen wir uns morgen um 6 hinter der Windm�hle am See und

So zeitig steh ich nicht freiwillig auf. Das w�r schon Strafe genug! :-D

> machen ein Eingabeduell. Die Waffen sind ja bereits festgelegt. Du an
> der Tab-Morstetaste, ich an der Entertaste.

Andersrum w�r wom�glich besser.

> Der Verlierer schneidet dem Gewinner die Fu�n�gel. ;-)

Was ist wenn ich nun nen Fu�fetisch hab und verlieren will? ;-)

MfG, Ulf

Frank Dzaebel

unread,
Sep 23, 2009, 2:17:25 PM9/23/09
to
Hallo Ulf, Julia,

da es jetzt nicht mehr C# ist, w�re das vom fachlichen
jetzt hier nicht mehr der richtige Ort.

Danke f�r das Verst�ndnis.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Herfried K. Wagner [MVP]

unread,
Sep 23, 2009, 4:06:57 PM9/23/09
to
"Frank Dzaebel" <Po...@FranksSeite.de> schrieb:

> da es jetzt nicht mehr C# ist, w�re das vom fachlichen
> jetzt hier nicht mehr der richtige Ort.
>
> Danke f�r das Verst�ndnis.

Dann ignoriere es doch einfach.

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ulf [Kado] Kadner

unread,
Sep 23, 2009, 5:39:56 PM9/23/09
to
Frank Dzaebel schrieb:

> da es jetzt nicht mehr C# ist, w�re das vom fachlichen
> jetzt hier nicht mehr der richtige Ort.

Frank entspann Dich! Der Thead w�r ohne Dein Posting mind. um 3
OT-Postings �rmer.

MfG, Ulf

Frank Dzaebel

unread,
Sep 23, 2009, 11:55:08 PM9/23/09
to
Hallo Ulf,

>> da es jetzt nicht mehr C# ist, w�re das vom fachlichen
>> jetzt hier nicht mehr der richtige Ort.

Danke.

0 new messages