Laden...

Control verliert Focus durch Pfeiltasten...

Erstellt von Animal21 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.171 Views
A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren
Control verliert Focus durch Pfeiltasten...

Hallo leut...
ich bastel mir grade eine eigene TextBox und bin anscheint zu blöd, in selbiger zu navigieren...
Also ich meine per Pfeiltasten durch die Buchstaben zu huschen:
Immer wenn ich Pfeil-Links/Rechts drücke verliert mein Control den Fokus... kann man dies irgedwie abstellen?

sorry wenn die Frage zu banal is, aber ich find das echt grad nicht...

mfg
ani

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Animal21,

das ist halt das Standardverhalten von Controls. Vermutlich sollte es ein e.Handled = true bei KeyPress tun.

herbivore

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren

Hallo Herbivore,
die control verliert den focus noch immer 😦

edit: ich weis nicht ob es wichtig ist, aber das form wo das control drauf ist, hat die propertie 'KeyPreview = true'

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Animal21,

die control verliert den focus noch immer 😦

ja, soviele Events im Zusammenhang mit der Eingabeverarbeitung gibt es ja nicht. Probier halt alle durch. Im zweifel bleib immer noch WndProc.

das form wo das control drauf ist, hat die propertie 'KeyPreview = true'

Ja, kann schon sein, dass du dann im Form das gleiche nochmal machen musst.

herbivore

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren

ok also weder wenn ich alle verfügbaren key-events auf e.Handled = true setzte, noch wenn ichs auf die form ausweite, verhindert das defokusieren...

kannst du mir evtl. formal beschreiben, was ich in der wndProc abfangen un wie bearbeiten soll?
btw. sollte ich die verarbeitung der keys gleich mit in die wndProc übertragen oder lieber bei den standard evens belassen, also was glaubst du wäre optimaler?

hab festgestellt, dass es doch manchmal recht nervig ist zu unterscheiden, bzw rauszulesen, aus welchem event ich was verwenden soll...

mfg
ani

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Animal21,

ok also weder wenn ich alle verfügbaren key-events auf e.Handled = true setzte

dann solltest du jetzt alle unnötigen/überflüssigen Stellen wieder rausnehmen ...

bzw rauszulesen, aus welchem event ich was verwenden soll...

... danach weißt du das. 😃

btw. sollte ich die verarbeitung der keys gleich mit in die wndProc übertragen

Nein, wenns mit den Key-Events geht, brauchst du die WinProc nicht.

herbivore

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren

ok, hab mal folgendes probiert:
zuerst hab ich alle key-handler von der form entfernt und die keyPreview=false gesetzt...
dann habe ich folgendes geschrieben:


protected override void OnKeyDown(KeyEventArgs e) {
        e.Handled = true;
        Console.WriteLine("OnKeyDown:\t" + e.KeyCode.ToString());
}
protected override void OnKeyPress(KeyPressEventArgs e) {
        e.Handled = true;
        Console.WriteLine("OnKeyPress:\t" + e.KeyChar.ToString());
}
protected override void OnKeyUp(KeyEventArgs e) {
        e.Handled = true;
        Console.WriteLine("OnKeyUp:\t" + e.KeyCode.ToString());
}

interessant ist, dass ich von allen drein KEINE ausgabe erhalte, wenn ich auf 'Pfeil-Links/Rechts' klicke, eine Ausgabe erhalte ich aber bei folgendem:


    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        Console.WriteLine("ProcessCmdKey:\t" + keyData.ToString());
        return base.ProcessCmdKey(ref msg, keyData);
    }

wie darf ich das verstehn?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Animal21,

wie darf ich das verstehn?

so, dass die Pfeiltasten als Kommandos (CmdKey) interpretiert werden, nicht als normalen Eingaben (Key).

herbivore

1.665 Beiträge seit 2006
vor 13 Jahren

Entweder du handlest sie in der CmdKey direkt oder du schleifst sie durch per Aufruf an OnKeyDown. Bei Letzterem musst du in der CmdKey das Handled-Flag anschließend prüfen und entsprechend den base-Aufruf vornehmen oder nicht.

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren

ok danke ihr beiden...
ich verareite die eingaben jetzt einfach per "ProcessCmdKey"
un wenn ich "return true" mach, wird der fokus auch nicht mehr weggegeben...

für alle die evtl das selbste problem hatten, sollten folgende zeit beachten, denn sonst geht der fokus mit "Tab" nicht mehr weiterzugeben:


        //...
        if(keyData == Keys.Tab) {
            if(Parent!=null)
                Parent.SelectNextControl(this, true, true, false, true);
        }
        //...

mfg
ani