Autor Beitrag
Beathoven
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 14.09.11 13:36 
Hallo zusammen,

ich tüftele gerade daran, meiner Applikation Tastenkürzel beizubringen.
In einer Form habe das bisher so gelösst:

1. ich definiere in der Form KeyPreview = true;
2. ich rufe den Delegate auf (MeineForm_KeyDown...).

Das klappt super :)

ABER:
ich habe nun ein UserControl Objekt erstellt. Dieses Objekt lade ich in ein Panel meiner Form:

ausblenden C#-Quelltext
1:
meinHauptPanel.Controls.Add(new IrgendeinUserControlObjekt());					


Auch im UserControl Objekt gibt es eine Keydown-Methode, aber diese wird nie aufgerufen. Leider verstehe ich nicht warum.
Als ich einen ähnlichen Fehler innerhalb einer Form hatte, fand ich heraus, dass ich wie in Schritt 1 beschrieben vorgehen muss.
Das Problem: ein UserControl Objekt erbt nicht von einer Form, und damit hab ich auch einen Zugriff auf die KeyPreview-Eigenschaft.

jetzt komm ich nicht weiter - kann mir vielleicht jemand helfen?

Vielen Dank und viele Grüße,
Stefan
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: Mi 14.09.11 14:05 
Ich vermute du kannst in deinem UserControl einfach ProcessKeyPreview überschreiben und dort dein Bearbeitung vornehmen (anstatt in KeyDown)
Beathoven Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 14.09.11 14:13 
Hey,

danke aber..ich bin noch recht neu in C#, würde es Dir was ausmachen ein Code-Snipplet anzufertigen?
Ein einfaches Überschreiben bewirkt bei mir nämlich gar nichts...

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 protected override bool ProcessKeyEventArgs(ref Message m)
        {
            log.Info(m.WParam);
            return base.ProcessKeyEventArgs(ref m);
        }


Ich hab da mal nen Brechpunkt reingesetzte, aber wie gesagt: die Methode wird nicht aufgerufen..

Ideen?

LG
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: Mi 14.09.11 14:35 
Zitat:
Ideen?


Ja. Ließ nochmal welche Methode ich gesagt habe die du überschreiben solltest und welche du überschrieben hast :wink:
Beathoven Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 15.09.11 09:38 
Me culpa - da waren die Augen wieder schneller als der Kopf, tut mir leid :)

Ich werde das mal versuchen und melde mich dann wieder... (mein Gott, wie peinlich,..)

Danke und LG
Beathoven Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 15.09.11 09:50 
Okay, damit funktioniert es schon eher - zumindest springt er bei einem Tastendruck in die Methode.
So richtig eine Idee, wie ich von da an die gedrückte Taste komme, habe ich aber noch nicht.

Magst Du mir nochmal helfen :) ?

Danke !
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: Do 15.09.11 10:16 
Die Windows Message bekommst du ja in der Methode übergeben. Die mußt du prüfen ob es eine WM_KEYDOWN Message war und dann sollte im WParam der gedrückte Key stehen.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
private const int WM_KEYDOWN = 0x0100;

protected override bool ProcessKeyPreview(ref Message m)
{
    if (m.Msg == WM_KEYDOWN)
    {
        Keys key = (Keys)m.WParam;
        if (key == Keys.F1)
        {
            // hier irgendwas anstellen und true zurückgeben um anzudeuten das die Message behandelt wurde
            MessageBox.Show("F1 gedrückt");
            return true;
        }                
     } 
     return base.ProcessKeyPreview(ref m);
}
Beathoven Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 15.09.11 11:32 
Ahhhh!

Ja okay- so tief bin ich noch nicht in die Materie vorgedrungen, aber wenn mans liesst, macht das auch Sinn :)

Viiiielen lieben Dank für die Hilfe :)

LG
Stefan