Diskuze: Shortcuts

C# .NET .NET (C# a Visual Basic) Shortcuts American English version English version

Avatar
Maros2470
Člen
Avatar
Maros2470:

Zdravím. Mám dotaz. Pokouším se v aplikaci využívat klávesových zkratek, ale nechce mi to fungovat. Ve Form mám nastaveno KeyPreview na true a kód mám takto:

private void MasterForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Control && e.KeyData == Keys.Enter)
            {
                var denikF = new DenikForm();
                denikF.Show();

            }
        }

Aplikace na klávesovou zkratku nereaguje. Pravděpodobně mi tam chybí nějaký Using, nebo knihovna. Můžete mi poradit? Děkuji

 
Odpovědět 2.11.2014 20:04
Avatar
Gramli
Redaktor
Avatar
Odpovídá na Maros2470
Gramli:
if(e.Control && e.KeyData == Keys.Enter)
Nahoru Odpovědět 3.11.2014 10:58
Kdo to říká ten to je...
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na Maros2470
Lukáš Křehula:
private void MasterForm_KeyDown(object sender, KeyEventArgs e)
         {
             if (e.KeyCode == Keys.Control && e.KeyCode== Keys.Enter)
             {
                 var denikF = new DenikForm();
                 denikF.Show();

             }
         }

Kdyby to nefungovalo tak další alternativa je:

private void MasterForm_KeyDown(object sender, KeyEventArgs e)
{
bool ctrl, enter;
if(e.KeyCode == Keys.Control) ctrl=true;
if(e.KeyCode == Keys.Enter) enter=true;
if(ctrl && enter)
{
  var denikF = new DenikForm();
  denikF.Show();

}
}
Editováno 3.11.2014 14:21
 
Nahoru Odpovědět 3.11.2014 14:20
Avatar
Maros2470
Člen
Avatar
 
Nahoru Odpovědět 4.11.2014 10:47
Avatar
Odpovídá na Maros2470
Andrej Farkaš:

Vyhodí ti aspoň tú udalosť?

Nahoru Odpovědět 4.11.2014 14:06
Live. Love. Learn.
Avatar
Maros2470
Člen
Avatar
 
Nahoru Odpovědět 4.11.2014 19:11
Avatar
Odpovídá na Maros2470
sadlomaslox25:

je treba rozlisovat key data a key code

if (e.KeyData == (Keys.Control | Keys.Enter))
    Console.WriteLine("k1");
if (e.KeyCode == Keys.Enter && e.Control)
    Console.WriteLine("k2");
if (e.KeyData.HasFlag(Keys.Enter) && e.KeyData.HasFlag(Keys.Control))
    Console.WriteLine("k3");
 
Nahoru Odpovědět 4.11.2014 20:35
Avatar
Odpovídá na Maros2470
Andrej Farkaš:

Nastav.

MasterForm.KeyPreview = true;

Alebo môžeš overridnuť ProcessCmdKey.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if (keyData == (Keys.Control | Keys.F)) {
    MessageBox.Show("Ctrl+F");
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
Editováno 5.11.2014 12:00
Nahoru Odpovědět 5.11.2014 11:56
Live. Love. Learn.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.