Общий способ получить контрольное имя при наведении курсора? - PullRequest
0 голосов
/ 11 октября 2009

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

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

Если у кого-то есть другая идея, у меня открытые уши.

Большое спасибо.

Ответы [ 5 ]

1 голос
/ 11 октября 2009

Разобрался. Проблема заключалась в том, что расположение мыши не было связано с расположением клиента. Таким образом, код ниже решит эту проблему. Я поместил его в поток опроса, который у меня уже был, но он должен работать с таймером или другим событием. Не работает в MouseMove по какой-то причине. Спасибо всем за помощь.

                Point p = this.PointToClient(MousePosition);
                Control x = this.GetChildAtPoint(p);
                if (x != null)
                {
                    MessageBox.Show(x.GetType().ToString() + " - " + x.Name);
                }
0 голосов
/ 11 октября 2009

Почему бы не сработать? Я помещаю его в базовую форму, на самом деле не вижу, что это не сработает, если глючит GetChildAtPoint.

    protected override void OnMouseMove(MouseEventArgs e)
    {
        Control c = this.GetChildAtPoint(e.Location);
        if (c != null)
        {
            MessageBox.Show(String.Format("Your control name is: {0} and type is {1}.", c.Name, c.GetType().ToString()));
        }
        base.OnMouseMove(e);
    }
0 голосов
/ 11 октября 2009

Готовы ли вы зарегистрироваться для каждого элемента управления мыши на событие? Если это так, отправитель будет типа, и т.д ... может быть, я что-то здесь упускаю? Кроме того, вы можете получить управление из визуального дерева в WPF / SL, почему бы не перенести на WPF?

0 голосов
/ 11 октября 2009

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

0 голосов
/ 11 октября 2009

Вам потребуется настроить несколько ToolTip объектов (по одному на каждое поле), просматривая все элементы управления в вашей форме, чтобы получить текст для каждой подсказки.

http://msdn.microsoft.com/en-us/library/system.windows.forms.tooltip.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...