Метод C#, применяемый ко всем элементам управления на панели

Я пытаюсь разработать систему, в которой пользователь может прокручивать flowLayoutPanel, который содержит список на панелях (которые создаются динамически). На каждой панели есть поле для изображений и две метки. Когда пользователь наводит указатель мыши на панель, я хочу, чтобы фоновое изображение панели изменилось.

До сих пор я сделал эти методы:

    private void pnlMouseHover(object sender, EventArgs e)
    {
        Panel panel1 = sender as Panel;
        panel1.BackgroundImage = STUDIO2.Properties.Resources.buttonbackgroundmouseover;
    }
    private void pnlMouseLeave(object sender, EventArgs e)
    {
        Panel panel1 = sender as Panel;
        panel1.BackgroundImage = STUDIO2.Properties.Resources.buttonbackground;
    }

Они работают просто отлично, но при запуске системы эти методы запускаются только тогда, когда мышь находится над той частью панели, которая не закрыта надписью или картинкой.

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

1 ответ

Решение

Возможности решения этого безграничны. Вот один из способов.

Вход и выход

Измени свой panel_Hover событие в panel_Enter так что событие не запускается постоянно.

Условный выход

Проверьте положение указателя перед удалением изображения.

private void pnlMouseLeave(object sender, EventArgs e)
{
    Panel panel1 = sender as Panel; // ← Your code

    Point mousePosition = PointToClient(Control.MousePosition);
    bool hasPointerInside = panel1.ClientRectangle.Contains(mousePosition);

    if (!hasPointerInside)
    {
        // Your code ↓
        panel1.BackgroundImage = STUDIO2.Properties.Resources.buttonbackground;

    }
}
Другие вопросы по тегам