Autor Beitrag
Doltsche
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 25.01.10 15:38 
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:

ausblenden 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):

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.