[C#] HotKeys [Vyřešeno]

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Y2Kane 20. 9. 2008 13:06

Ahoj.
Při vývoji aplikace bych potřeboval mít možnost použít klávesové zkratky na nějaké akce (např. F1 vyvolá nápovědu apod.).

Jako první a celkem funkční možnost se jeví využít události keyup/keypressed u formuláře. Ideální by to bylo, kdyby stačilo využít této události u formuláře, jenže problém je v tom, že když na něm mám třeba tlačítko, které má zrovna focus, tak se vyvola keyup jen na něm, nikoliv na formuláři. Takže moje obsluha události musí být na všech komponentách a to (vzhledem k tomu, že v aplikaci dynamicky přidávám/odebíram komponenty) mi příjde dost těžkopádný.

Pak jsem vygooglil možnost využití funkce RegisterHotKey z knihovny user32.dll. Problém je ale v tom, že se jedná o global hot key... tj. zachytává to kdekoliv ne jen v mé aplikaci. No a když si tam zaregistruju např. F1, tak F1 nikde jinde nefunguje. Takže slepá ulička.

Nakonec jsem objevil možnost překrytí metody ProcessDialogKey, která je v předkovi formulaře: Control. Už jsem myslel, že mám vyhráno, ale opět jsem narazil na problémy. Ve formuláři používám datagrid a jakmile získá focus, tak pro klávesovou zkratku F2 (která se v tomto okamžiku nevyužívá na editaci buněk gridu) se ProcessDialogKey formuláře nezavolá. Problém jsem vyřešil pomocí události keyup u daného datagridu, ale nepříjde mi to jako zrovna čisté řešení, zvláště pokud těch gridu bude ve výsledku víc, takže to budu muset dělat stále dokola.

Nenapadá náhodou někoho něco lepšího? Prostě potřebuji, aby se při aktivním okně při stisku libovolné klavesy (či kombinace) vyvolala nějaká událost.

Děkuji za jakoukoliv radu.
Naposledy upravil Y2Kane dne 21. 9. 2008 09:17, celkově upraveno 1
Y2Kane
Kolemjdoucí

Odeslat příspěvekod hawelo 20. 9. 2008 17:56

Ak sa nemylim, tak form ma vlastnost KeyPreview, ktoru ak nastavis na true, tak ti bude zachytavat aj key eventy od controlov, ktore su na formulari.
hawelo
Junior

Odeslat příspěvekod Y2Kane 21. 9. 2008 09:16

Jo, to je ono. Já věděl, že to půjde nějak jednodušeji a že den strávený nad výše popsanými postupy je jen ztráta času.... no... holt i to patří k programování :-).

Dík moc.
Y2Kane
Kolemjdoucí


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků