
C# Spacabar + jiná klávesa
Zdar potřeboval bych poradit. Mám kód a potřebuju aby když zmáčknu D+Space tak aby to něco udělalo... Také pokud za Space dám například Alt tak to funguje ...
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space && e.KeyCode == Keys.D)
{
DoSkokAsync();
}
}
Bohužel ve WinForms lze použít jen kombinaci CTRL, ALT či SHIFT + cokoliv
A to následujícím způsobem:
Ve WPF lze použít cokoliv:
Ve WinForms si bude muset udržovat vlastní seznam stisknutých kláves. V KeyDown do něj přidávat, v KeyUp z něj ostraňovat, takže v každém okamžiku bude mít přehled o všech stisknutých klávesách.
Jestli myslíš něco takového, tak to mu spolehlivě fungovat taky nebude:
Funguje mi to dle očekávání. Proč by to nemělo být spolehlivé?
Zkus nezapisovat hodnotu do label1.Textu, ale hod tam něco takového:
Tak si tam přidá něco takového:
Tak jo, taks mě přechytračil.
Kurňa funguje to.
Ale je to docela pracné v některých případech, to takhle ručně ošetřovat.
I když elegantní docela v tomto.
Tak tohle je jenom PoC, určitě by to šlo udělat elegantněji. Např. přesunutím logiky a seznamu kláves do vlastní třídy s vlastními událostmi, případně vytvořením třídy odvozené z Form, ze které by teprv dědil Form1.