Захват сообщений мыши, когда отображается 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
Вы должны рассчитать относительное местоположение его родителя