Получить контроль над мышью - PullRequest
0 голосов
/ 19 июля 2010

Я работаю над приложением C # .NET. Мое приложение использует TablePanelLayout в качестве контейнера. Он содержит много дочерних элементов управления (Label, TextBox, Button ...). Когда мышь перемещается над элементом управления, как я могу получить имя этого элемента управления?

Ответы [ 3 ]

1 голос
/ 19 июля 2010

Метод Control.GetChildAtPoint (Point) и Метод Control.GetChildAtPoint (Point, GetChildAtPointSkip) делайте то, что вам нужно.

Но в вашем случае вы также можете сделать следующее: для каждого дочернего элемента в вашей панели добавьте слушателя к событию наведения мыши дочернего элемента и в этом прослушивателе проверьте параметр отправителя.

0 голосов
/ 19 июля 2010

Мне пришлось сделать что-то похожее, чтобы получить имя элемента управления, на котором пользователь щелкнул Ваш случай наведен на мышь, но тот же подход, вероятно, сработает. Я закончил, используя:

Application.AddMessageFilter(new MyMessageFilter());

при запуске программы. Основы MyMessageFilter выглядит примерно так. Вам придется адаптироваться к движениям мыши.

class MyMessageFilter : IMessageFilter
{
    public bool PreFilterMessage(ref Message msg)
    {
        try
        {
            const int WM_LBUTTONUP = 0x0202;
            const int WM_RBUTTONUP = 0x0205;
            const int WM_CHAR = 0x0102;
            const int WM_SYSCHAR = 0x0106;
            const int WM_KEYDOWN = 0x0100;
            const int WM_SYSKEYDOWN = 0x0104;
            const int WM_KEYUP = 0x0101;
            const int WM_SYSKEYUP = 0x0105;

            //Debug.WriteLine("MSG " + msg.Msg.ToString("D4") + " 0x" + msg.Msg.ToString("X4"));

            switch (msg.Msg)
            {
                case WM_LBUTTONUP:
                case WM_RBUTTONUP:
                    {
                        Point screenPos = Cursor.Position;
                        Form activeForm = Form.ActiveForm;

                        if (activeForm != null)
                        {
                            Point clientPos = activeForm.PointToClient(screenPos);

                            RecordMouseUp(clientPos.X, clientPos.Y, GetFullControlName(msg.HWnd));
                        }
                    }
            }
        }
    }

    private string GetFullControlName(IntPtr hwnd)
    {
        Control control = Control.FromHandle(hwnd);
        return control.Name; // May need to iterate up parent controls to get a full path.
    }      

}
0 голосов
/ 19 июля 2010

вы можете сделать что-то вроде этого, используйте jquery, чтобы навести указатель мыши на функцию.

$ ('# external'). Mouseover (function () {// получить здесь управление));1003 *

...