Для моих полей со списком в моем приложении я хочу разрешить пользователю редактировать коллекцию, к которой привязаны элементы управления. Чтобы сделать это, я хочу иметь кнопку, которая появляется, когда курсор находится над элементом управления. Итак, я создал пользовательский элемент управления с комбинированным полем и кнопкой на нем. Тем не менее, у меня возникла проблема с тем, чтобы кнопка отображалась в нужное время. Вот мой код:Показать кнопку, когда родительский указатель в родительском элементе управления
public partial class CollectionDropDown : UserControl
{
public CollectionDropDown()
{
InitializeComponent();
SetEventsRecursively(Controls);
}
public void SetEventsRecursively(ControlCollection controls)
{
foreach (Control ctrl in controls)
{
ctrl.MouseLeave += new EventHandler(ctrl_MouseLeave);
ctrl.MouseEnter += new EventHandler(ctrl_MouseEnter);
SetEventsRecursively(ctrl.Controls);
}
}
void ctrl_MouseEnter(object sender, EventArgs e)
{
button1.Visible = true;
}
void ctrl_MouseLeave(object sender, EventArgs e)
{
button1.Visible = false;
}
}
Таким образом, идея в том, что все элементы управления будут иметь тот же мышь входит/выходит так, когда мышь входит весь контроль кнопка будет видна, и когда он оставляет бы быть невидимым. Проблема заключается в том, что событие ввода «мышь» срабатывает перед входом. Поэтому, когда вы перемещаете мышь в элемент управления, кнопка становится видимой. Но когда вы пытаетесь перейти к кнопке, независимо от того, какой контроль над курсором закончился, мышь уходите, и кнопка становится невидимой, прежде чем «ввести» ее. Есть предположения?
Почему бы не добавить некоторую логику, чтобы узнать, действительно ли мышь находится в элементе управления? – emd
По крайней мере, одна причина, по которой это не работает, заключается в том, что вы забыли о событиях ввода/выхода для самого элемента управления. Мигающая кнопка не так уж и хороша, лучший способ сделать это - использовать только событие Enter, а затем запустить таймер 200 мс, который проверяет, не больше ли мыши над элементом управления. –
@HansPassant Извините, у меня есть это событие, связанное с родителем, это просто сделано через дизайнера. Однако мне нравится идея таймера. – Nick