Я создал пользовательский элемент управления UserControl, который отображается в ToolStripDropDown, чтобы эмулировать функциональность всплывающей подсказки. В основном это отлично работает для любого элемента управления, когда я подписываюсь на их события MouseEnter и MouseLeave.
Я также хочу использовать его для пользовательских объектов (не элементов управления). Я создал интерфейс, который определяет события MouseEnter и MouseLeave, так что я могу подписать любой объект (например, нарисованные пользователем примитивы) на эту всплывающую подсказку. Эти классы выполняют свою собственную работу, чтобы определить, когда запускать MouseEnter и MouseLeave.
Моя проблема заключается в том, что когда отображается всплывающая подсказка, мои пользовательские элементы управления, которые содержат пользовательские объекты, не получают события MouseMove, даже если всплывающая подсказка отображается сбоку, а не под мышью. Я генерирую свое собственное событие MouseLeave на основе проверки MouseMove, если мышь больше не находится над рассматриваемым объектом. Но очевидно, что без событий MouseMove MouseLeave никогда не срабатывает.
Когда я показываю всплывающую подсказку в элементе управления, происходит то же самое (без событий MouseMove), за исключением того, что MouseLeave все еще срабатывает.
1) Как я могу эмулировать эту функциональность MouseLeave? Должен ли я использовать p/invoke для движения мыши SetCapture, или кто-нибудь знает более простой способ?
2) Когда отображается всплывающая подсказка, даже несмотря на то, что ни ToolStripDropDown, ни мой UserControl внутри него не запускают событие «GotFocus», я все равно теряю фокус клавиатуры, пока отображается всплывающая подсказка, что также нежелательно. поведение всплывающей подсказки. Могу ли я этого избежать?
В основном я хочу, чтобы это была полностью не фокусируемая, не мешающая всплывающая подсказка. Я просмотрел пример проекта под названием SuperTooltip, но он имел ту же несовершенную функциональность. Я попытался установить для ControlStyles.Selectable значение false и не заметил никаких изменений.
Вот код, в котором я создаю свою всплывающую подсказку UserControl:
public CustomTooltip()
{
this.SetStyle(ControlStyles.Selectable, false);
dropDown = new ToolStripDropDown();
dropDown.AutoSize = false;
dropDown.Margin = Padding.Empty;
dropDown.Padding = Padding.Empty;
host = new ToolStripControlHost(this);
host.AutoSize = false;
host.Margin = Padding.Empty;
host.Padding = Padding.Empty;
this.Location = new Point(0, 0);
dropDown.Items.Add(host);
}
И я показываю это с помощью:
dropDown.Show(
new Point(Cursor.Position.X, Cursor.Position.Y + Cursor.Current.Size.Height),
ToolStripDropDownDirection.BelowRight
);