Остановить контроль над ребенком? - PullRequest
0 голосов
/ 18 января 2012

Итак, у меня есть панель, которая при помощи мыши Enter и Mouse Leave меняет видимость некоторых элементов управления, которые закреплены внутри нее.

Проблема в том, что всякий раз, когда я наводю указатель мыши на элемент управления на панели, Mouse Enter затем перемещается к этому индивидуальному элементу управления, и поэтому они становятся невидимыми.

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

Приветствия:)

1 Ответ

1 голос
/ 18 января 2012

Интересная проблема. Если вы поместите Console.WriteLine в MouseEnter или MouseLeave, вы заметите, что когда ваша мышь перемещается над элементом управления, он прячется, что заставляет мышь вернуться на панель, которая затем показывает элемент управления, который заставляет элемент управления скрываться ...

Единственный способ выяснить, как выполнить ваш запрос, - удалить события MouseEnter и MouseLeave. Затем я добавил событие MouseMove в форму, содержащую панель. Я также добавил событие MouseMove на панель. Оба события вызывают процедуру, которая проверяет координаты мыши, чтобы определить, находится ли она над панелью. Если подпрограмма MouseCheck возвращает true, то покажите элементы управления, если нет, то скройте их. Пример ниже - C #, но я уверен, что вы можете понять эту идею.

   private bool MouseCheck(Control ctl, Point point)
    {
        bool blnRet = false;

        if (point.X < ctl.Left)
        {
            blnRet = false;
        }
        else if (point.X > ctl.Left + ctl.Width)
        {
            blnRet = false;
        }
        else if (point.Y < ctl.Top)
        {
            blnRet = false;
        }
        else if (point.Y > ctl.Top + ctl.Height)
        {
            blnRet = false;
        }
        else
        {
            blnRet = true;
        }

        return blnRet;
    }
...