Получение ввода мыши на полную панель c #

Итак, у меня есть панель, которая программно заполнена пользовательскими элементами управления, используя DockStyle.Top.

Мне нужно, чтобы панель как-то фокусировалась, когда курсор мыши входит в панель, чтобы пользователь мог использовать колесико мыши для прокрутки панели.

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

Один из способов - проверить положение мыши и проверить, содержит ли панель его, что, вероятно, потребует дополнительной нити или мыши, но, возможно, есть лучший способ?

0
nl ja de
добавлено автор spajce, источник
Создайте одну функцию обработчика. Внутри функции InitializeComponent назначьте один и тот же обработчик для каждого элемента управления.
добавлено автор sgarizvi, источник
Существует свойство Tag . Вы можете связать один обработчик событий со всеми вашими панелями и идентифицировать их с помощью Tag . Это в случае, если вам нужно что-то продвинутое (у меня нет реального примера). В любом случае, первый аргумент обработчика, содержащий отправителя object sender , вы можете наложить один Panel myPanel = отправитель как Panel; .
добавлено автор Leri, источник
@PLB Это не работает, так как панель не видит мышь, так как она находится под другими элементами управления.
добавлено автор Jixi, источник
@ sgar91 Это все равно потребует наличия «массивного» цикла каждый раз, когда панель обновляется
добавлено автор Jixi, источник

1 ответы

Вы можете реализовать класс MouseDetector , отправленный Amen Ayach как &hl=ru к аналогичному вопросу и активировать форму, когда мышь завивает:

void m_MouseMove(object sender, Point p)
{
    Point pt = this.PointToClient(p);
    if (this.ClientSize.Width >= pt.X &&
                    this.ClientSize.Height >= pt.Y &&
                    pt.X > 0 && pt.Y > 0)
    {
        this.Activate();
    }
}

Вы также должны установить для Panel AutoScroll значение true .

panel.AutoScroll = true;
2
добавлено
Добро пожаловать! Так держать.
добавлено автор Alex Filipovici, источник
Это, похоже, работает отлично, за исключением добавления таймера, что не так уж плохо, учитывая, что я могу использовать один экземпляр для любого фокуса, который мне нужен, спасибо! Не знаю, как я пропустил это. Хотя я и прочитал ответ раньше: P
добавлено автор Jixi, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot