HI. Я расширяю приложение Windows, написанное на C#, чтобы предоставить помощь пользователю (в контексте сфокусированного элемента управления), когда они попадают в клавишу F1.Глобальный обработчик событий для всех элементов управления для справки пользователя
Что я хотел бы сделать, это использовать событие Control.HelpRequested, но я не уверен, как расширить все элементы управления для обработки этого события. http://msdn.microsoft.com/en-us/library/system.windows.forms.control.helprequested.aspx
Это на самом деле не представляется возможным обновлять каждый элемент управления «вручную», чтобы справиться с этим событием, и я действительно не нравится идея пробегаем по всем элементам управления в форме (откроется форма), чтобы связать событие обработчик.
Есть ли опрятный способ расширения всех элементов управления формы для обработки определенного события?
Это только что сделал, но я почти чувствую, что я должен быть в состоянии написать что-то вроде этого
[HandleEvent Control.HelpRequested, ApplyTo Typeof(Control)] void MyEventHandler(object sender, EventArgs e) { // code to handle event... }
Любые предложения или, возможно, идеи о другом подходе очень ценятся - Спасибо
На самом деле я уже прочитал эту статью и дошел до внедрения метода ProcessKeyPreview (кстати, контекст справки должен поступать напрямую из базы данных, поэтому формат файла справки окна isn 'вариант). –
Затем я вспомнил, что мне нужно было помочь с помощью кнопки вопроса (обычно в правом верхнем углу формы), где вы можете щелкнуть элемент управления и снова получить контекстную справку. После некоторого исследования этим утром я столкнулся с событием HelpRequested, которое кажется более уместным, чем захват ключа F1, поскольку инфраструктура .Net раскрывает это событие специально для разработчика, чтобы внедрить справочную систему. Все равно получите предложение - спасибо :) –
Да, это предлагаемое решение, но если вы хотите запустить «глобальное» событие, вы можете запустить его из WndProc самостоятельно и иметь один обработчик событий. – Groo