Как сделать так, чтобы горячая клавиша вызывала кнопку Windows Forms?

У меня есть кнопка в форме, которой я хочу назначить горячую клавишу:

namespace WebBrowser
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        int GetPixel(int x, int y)
        {
            Bitmap bmp = new Bitmap(1, 1, PixelFormat.Format32bppPArgb);
            Graphics grp = Graphics.FromImage(bmp);
            grp.CopyFromScreen(new Point(x,y), Point.Empty, new Size(1,1));
            grp.Save();
            return bmp.GetPixel(0, 0).ToArgb();
        }

        // THIS! How can I make a hot-key trigger this button?
        //
        void Button1Click(object sender, EventArgs e)
        {
            int x = Cursor.Position.X;
            int y = Cursor.Position.Y;
            int pixel = GetPixel(x,y);
            textBox1.Text = pixel.ToString();
        }

        void MainFormLoad(object sender, EventArgs e)
        {
            webBrowser1.Navigate("http://google.com");
        }
    }
}

person Di4g0n4leye    schedule 19.03.2010    source источник
comment
Любопытно: для чего на самом деле здесь кнопка? Вы хотите, чтобы код в текущем обработчике ButtonClick выполнялся только тогда, когда конечный пользователь имеет курсор где-то в пределах границ элемента управления WebBrowser? Или вы хотите сделать снимок цвета под курсором в любом месте границ формы, в том числе над самой кнопкой?   -  person BillW    schedule 19.03.2010
comment
Переопределите метод формы ProcessCmdKey.   -  person Cody Gray    schedule 16.07.2011


Ответы (1)


Предполагая, что это проект Windows Forms с элементом управления WebBrowser: WebBrowser будет «съедать нажатия клавиш» в любое время, когда он находится в фокусе, даже если для параметра Form KeyPreview установлено значение «true».

Используйте событие WebBrowser PreviewKeyDown для вызова нажатия кнопки:

    private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs event)
    {
        // Possibly filter here for certain keystrokes?
        // Using e.KeyCode, e.KeyData or whatever.
        button1.PerformClick();
    }
person BillW    schedule 19.03.2010