Лучший способ реализовать сочетания клавиш в приложении Windows Forms? - PullRequest
265 голосов
/ 30 декабря 2008

Я ищу лучший способ реализовать обычные сочетания клавиш Windows (например, Ctrl + F , Ctrl + N ) в моем приложении Windows Forms в C #.

Приложение имеет основную форму, которая содержит множество дочерних форм (по одной за раз). Когда пользователь нажимает Ctrl + F , я хотел бы показать форму пользовательского поиска. Форма поиска будет зависеть от текущей открытой дочерней формы в приложении.

Я думал об использовании чего-то подобного в ChildForm_KeyDown событии:

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

Но это не работает. Событие даже не срабатывает, когда вы нажимаете клавишу. Какое решение?

Ответы [ 11 ]

0 голосов
/ 10 января 2018
private void buttonCheck_Click_1(object sender, EventArgs e)
{
    bool jeElement = false;

    for (int i = 0; i < listBox1.Items.Count; i++)
    {
        if (textBox1.Text == listBox1.Items[i].ToString())
        {
            jeElement = true;
            break;
        }
    }

    if (jeElement)
    {
        label1.Text = "je element";
    }
    else
    {
        label1.Text = "ni element";
    }
    textBox1.ResetText();
    textBox1.Focus();
}

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Alt == true && e.KeyCode == Keys.A)
    {
        buttonCheck.PerformClick();
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    if (radioButtonF.Checked)
    {
        progressBar1.Value++;
    }
    else
    {
        progressBar1.Value--;
    }

    if (progressBar1.Value == progressBar1.Maximum)
    {
        timer1.Stop();
        label1.Text = "End";
    }

    if (progressBar1.Value == progressBar1.Minimum)
    {
        timer1.Stop();
        label1.Text = "Begining";
    }
}

private void radioButtonF_CheckedChanged(object sender, EventArgs e)
{
    timer1.Start();
    progressBar1.Value = 0;
    progressBar1.Maximum = 100;
}

private void radioButtonB_CheckedChanged(object sender, EventArgs e)
{
    timer1.Start();
    progressBar1.Value = 100;
    progressBar1.Minimum = 0;
}

пожалуйста, не удаляйте этот комментарий

...