310 votes

La meilleure façon de mettre les raccourcis clavier dans une application Windows Forms?

Je suis à la recherche d'une meilleure façon de mettre en commun Windows raccourcis clavier (par exemple Ctrl+F, Ctrl+N) dans mon Windows Forms application en C#.

L'application dispose d'un formulaire principal qui accueille de nombreux formulaires enfants (un à la fois). Lorsqu'un utilisateur appuie sur Ctrl+F, j'aimerais vous montrer une coutume formulaire de recherche. Le formulaire de recherche dépendra de l'ouverture actuelle de l'enfant formulaire dans l'application.

Je pensais de l'aide de quelque chose de ce genre dans l' *ChildForm_KeyDown* événement:

   if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
        // Show search form

Mais cela ne fonctionne pas. L'événement n'a pas encore le feu lorsque vous appuyez sur une touche. Quelle est la solution?

502voto

Hans Passant Points 475940

Vous avez probablement oublié de définir la forme du KeyPreview True à la propriété. Substitution de la ProcessCmdKey() la méthode est la solution générique:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if (keyData == (Keys.Control | Keys.F)) {
    MessageBox.Show("What the Ctrl+F?");
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}

81voto

Almir Points 351

Sur votre formulaire Principal

  1. Ensemble KeyPreview de Vrai
  2. Ajouter de l'événement KeyDown handler avec le code suivant

    private void MainForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.N)
        {
            SearchForm searchForm = new SearchForm();
            searchForm.Show();
        }
    }
    

20voto

Konrad Rudolph Points 231505

Le meilleur moyen est d'utiliser le menu mnémoniques, c'est à dire d'avoir des entrées de menu dans votre formulaire principal qui attribue le raccourci clavier que vous voulez. Ensuite, tout le reste est géré à l'interne et à tout ce que vous avez à faire est de mettre en œuvre les mesures appropriées, qui est exécutée dans l' Click gestionnaire d'événement de cette entrée de menu.

11voto

Shilpa Points 142

Vous pouvez même essayer cet exemple:

    public class MDIParent : System.Windows.Forms.Form
    {
        public bool NextTab()
        {
             // some code
        }

        public bool PreviousTab()
        {
             // some code
        }

        protected override bool ProcessCmdKey(ref Message message, Keys keys)
        {
            switch (keys)
            {
                case Keys.Control | Keys.Tab:
                  {
                    NextTab();
                    return true;
                  }
                case Keys.Control | Keys.Shift | Keys.Tab:
                  {
                    PreviousTab();
                    return true;
                  }
            }
            return base.ProcessCmdKey(ref message, keys);
        }
    }

    public class mySecondForm : System.Windows.Forms.Form
    {
        // some code...
    }

8voto

Corin Blaikie Points 6223

Si vous avez un menu changeant ShortcutKeys de la propriété de l' ToolStripMenuItem devrait faire l'affaire.

Si pas, vous pouvez en créer un et de l'ensemble de ses visible valeur false à la propriété.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X