Могу ли я обработать событие нажатия клавиши, даже если представление сетки не сфокусировано?

У меня есть представление сетки данных внутри элемента управления, которое отображается в определенной области приложения.

Я бы хотел, чтобы эта сетка действий обновлялась при нажатии F5.

Это достаточно легко сделать, когда представление сетки действий является текущим сфокусированным элементом на экране, обработав событие Key Up, но это, очевидно, не работает, когда другой элемент (например, строка меню) был последним, на что было нажато. .

Есть ли способ отслеживать нажатия клавиш в этом случае? У меня нет доступа к коду за пределами моего представления/управления сеткой данных.

Ответ на этот вопрос может быть однозначным «нет», но я хотел убедиться, что не упустил чего-то очевидного при выполнении этой работы.


person Lawrence Johnston    schedule 06.02.2009    source источник
comment
Есть ли общедоступный метод обновления для этого элемента управления? Если есть, то вы должны иметь возможность обрабатывать все нажатия F5 в форме и просто вызывать метод обновления элементов управления.   -  person BFree    schedule 06.02.2009


Ответы (4)


No.

Если у вас нет доступа к другим элементам управления, которые в данный момент могут быть в фокусе, вы не сможете передать сообщение о нажатой клавише от них вашему элементу управления.

person Yes - that Jake.    schedule 06.02.2009

Вы можете выполнить некоторую глобальную обработку событий клавиатуры в форме, на которой находятся элементы управления.

Если вы добавите это в свою форму, вы можете получить глобальные ключевые события до того, как они будут отправлены в элемент управления.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch (keyData)
    {
        case Keys.F5:
            // Send Refesh Event To Grid
            return true; // Mark Key As Handled

            // Add Any Extra Command Keys Here
    }

    return base.ProcessCmdKey(ref msg, keyData); // Resend To Base Function
}
person VBNight    schedule 06.02.2009

Вы пытались зафиксировать событие в самой форме, а затем вызвать обработчик событий для сетки данных? Вам нужно будет установить для KeyPreview значение true, чтобы форма получала уведомления о событиях клавиатуры.

person Tundey    schedule 06.02.2009

Лучший способ справиться с этим — заставить основную форму приложения обрабатывать все нажатия клавиш. Для этого установите для основного свойства формы «KeyPreview» значение True.

Затем обработайте все события KeyUp в основной форме. Дополнительные сведения о KeyPreview можно найти здесь: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx

person jgallant    schedule 06.02.2009