[C#] Shortcut für Buttonclick

corey

Ensign
Registriert
März 2005
Beiträge
254
Hi all,

Wie bringe ich das hin, dass wenn ich die Taste [1] drücke, ein Buttonklick simuliert wird?

Gruss

corey---
 
Hallo corey,

in C# keine Ahnung, in C++ fängst Du den Tastaturevent ab und simulierst dann einen Mausklick in dem Du dem Button eine WM_COMMAND Nachricht mit Notifier BN_CLICKED Nachricht sendest.

MfG

Arnd
 
Hi all,

Vielleicht für dies interessiert:

Ich habs so hingekriegt. Ich benutze das KeyUp Event bei einem Button. Dort schreibe ich meinen Code, welcher bei einem Click passieren soll. Nun überprüfe ich welche Taste gedrückt wird über die KeyUp Methode. Mein COde sieht so aus:
Code:
Keys key = new Keys();
key = e.KeyData;
//MessageBox.Show(Convert.ToString(key));
if(key == Keys.NumPad1)
{
	btnNr1_Click(this, new EventArgs());
}

danke trotzdem für deine hilfe arnd;)

gruss

corey
 
Hallo corey,

so wie Du es formulierst wird das aber nur funktionieren wenn der Button den Focus hat.

Sobald der Anwender auf einen anderen Button oder ein anderes Control klickt (z.B. eine Listbox) wird der Tastendruck nicht erkannt.
Die Windows Events sind doch auch mit C# die gleichen?

D.h. damit der Tastendruck immer erkannt wird musst Du in den Parent des Buttons gehen und dort den Key abfangen, bevor er an seine Childs weitergeleitet wird.

Und der Ansatz die Methode btnNr1_Click direkt aufzurufen ist nicht besonders schön.
Eleganter ist es die Nachricht zu versenden und damit den Aufruf der Methode auszulösen.

MfG

Arnd
 
Zuletzt bearbeitet:
Hi arnd,

das mit dem focus stimmt! hab ich vorhin gemerkt. aber wie kriege ich dies mit

"Eleganter ist es die Nachricht zu versenden und damit den Aufruf der Methode auszulösen.
"

hin??

Vielen Dank für deine antwort.

gruss

corey
 
Hallo Corey,

z.B.

PostMessage(hwnd, WM_COMMAND,MAKELONG(IDC_BUTTON, BN_CLICKED),0);

Habe es aber nicht ausprobiert. Siehe Doku. Die Parameter für das MAKELONG könnten auch andersherum gehören.

Das hat den Vorteil das der aufrufende Code nicht blockiert wird und sofort weiterlaufen kann.

MfG

Arnd
 
Du kannst aber auch eine Methode schreiben, die du in btnNr1_Clicked und in deiner KeyUp Bedingung aufrufst.
PostMessage ist härteste Win32 API und davon will man ja mit C# ein wenig weg.

so far, erazor
 
Vielleicht gibt es ja auch eine Kapselung dafür in C#?

Es geht mir um die Funktionalität die PostMessage bietet.

Den direkten Aufruf von Callback Methoden halte ich für keinen genialen Programmierstil.
Auch wenn ich selber manchmal mache :-).

Dadurch können Seiteneffekte entstehen, für die manchmal etwas länger braucht um sie später zu verstehen. Zumindest mir geht das so.

MfG

Arnd
 
ich denke das gleiche wie [UPS]Erazor. denn die harten api calls wie in c und c++ sollen ja in .NET nicht mehr all zu oft vorkommen...;) das mit einem eigenen key up erreignis probiere ich mal:)

gruss

corey
 
Zurück
Oben