Entwickler-Ecke

Basistechnologien - ProcessCmdKey Methode überschreiben


Doltsche - Mo 25.01.10 15:38
Titel: ProcessCmdKey Methode überschreiben
Hallo zusammen

Wenn in einem Formular bsp. ein Button fokusiert ist, und man anschliessend die Enter-Taste drückt, so wird dieser Button ausgelöst.
Dies möchte ich ändern.
Nun würde ich gerne wissen wie genau ich die ProzessCmdKey Methode überschreiben muss.

Bisher habe ich folgendes:


C#-Quelltext
1:
2:
3:
4:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {            
            return base.ProcessCmdKey(ref msg, keyData);
        }


Allerdings muss hier vermutlich noch etwas rein.

Die Entertaste versuchte ich dann wie folgt abzufangen (KeyPreview ist auf true):


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Return)
            {
                ...
                e.Handled = true;
            }
        }


Allerdings scheint dies nicht so wirklich zu klappen.
Könnt Ihr mir da evtl. weiterhelfen?

Für eine Atwort danke ich schonmal im Voraus vielmals :wink:.

LG Samuel


Ralf Jansen - Mo 25.01.10 16:00

Die Behandlung von Enter mußt du dann auch in der ProcessCmdKey Methode(des Buttons) durchführen nicht in KeyDown.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{            
    if ((keyData & Keys.KeyCode) == Keys.Return)             
    {
        // mach was
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}



Wenn du nur Return behandeln willst wäre ProcessDialogKey zu überschreiben vielleicht sinnvoller. Gehen tut aber natürlich beides.


Doltsche - Mo 25.01.10 17:48

Hallo

Danke für die Antwort.
Allerdings bin ich damit nicht wirklich weitergekommen.
Ich habe dann den override Teil einfach in die Ereignisprozedur des Buttons kopiert. Das scheint allerdings nicht zu klappen.
Überdies hat das KeyDown Ereignis keinen Zusammenhang mit der ProcessCmdKey Methode d.h. ich behandle diese nicht innerhalb dieser Ereignisprozedur.

Hoffe ihr könnt mir weiterhelfen ;)

LG Samuel


Ralf Jansen - Mo 25.01.10 18:14

Welche Ereignisprozedur :gruebel:
Du hast einen Button abgeleitet dort ProcessCmdKey überschrieben und darin die Behandlung des Return Keys implementiert. Wo ist da eine Ereignisprozedur?

Zitat:
Überdies hat das KeyDown Ereignis keinen Zusammenhang mit der ProcessCmdKey Methode

Richtig deshalb sollte die Behandlung ja auch in die ProcessCmdKey Methode. Den KeyDown Event brauchst du nicht.