Захват сообщений мыши, когда отображается ToolStripDropDown

Я пытаюсь создать "всплывающую подсказку", которая содержит пользовательский элемент управления. Я реализовал это с помощью ToolStripDropDown который делает то, что мне нужно - закрывается, когда пользователь щелкает где-то еще, или активирует другое окно и т. д.

Тем не менее, я хотел бы иметь возможность получить MouseMove событие в родительском элементе управления, даже если ToolStripDropDown Показано. Я пытался установить Capture свойство родительского элемента управления на разных этапах (перед показом раскрывающегося списка, в его Opened обработчик событий и т. д.), но он всегда сразу возвращается в значение false. Есть ли способ (не обязательно использовать Capture собственность), чтобы получить MouseMove событие в родительском контроле? И нет, я не хочу рассматривать уродливые хаки, такие как использование таймера и периодическая проверка положения мыши.

1 ответ

Если вы хотите знать положение мыши все время, то вам нужно зарегистрироваться MouseDown событие для родительского контроля и ToolStripDropDown управление, что-то вроде этого:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    lblPosition.Text = e.Location.ToString();
}

private void toolStripDropDownButton2_MouseMove(object sender, MouseEventArgs e)
{
    lblPosition.Text = e.Location.X + toolStripDropDownButton2.Bounds.Location.X + ", " + toolStripDropDownButton2.Bounds.Location.Y + e.Location.Y;
}

За ToolStripDropDown Вы должны рассчитать относительное местоположение его родителя

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