Я пытаюсь создать настраиваемый элемент управления, который срабатывает даже при нажатии. Мой контроль - это всего лишь панель с несколькими ярлыками и внутри.
Щелчок работает отлично, единственная проблема заключается в том, что я должен щелкнуть фон элемента управления, и если я нажимаю на картинку, то не работает.
Я добавил событие on click для элемента управления, но я хотел бы нажать на него в любом месте, чтобы вызвать событие, а не только фон панели.
Я думал о добавлении прозрачного объекта, который полностью охватывает элемент управления. Мне на самом деле не нравится эта идея, однако, я пробовал с фотокамерой, но я не вижу ее. Это не прозрачно. Я могу просто увидеть фон панели, но он охватывает метки и изображение.
Спасибо за поддержку.
Если у вас всего несколько объектов на панели, вы можете привязать событие Click
всех объектов, которые он содержит к одному и тому же обработчику событий, нет ничего плохого в этом.
public class MyUserControl : UserControl
{
public event Action<MyUserControl> MyControlClick
public string ID {get; set;}
public MyUserControl()
{
InitializeComponents();
// The same event handler code will be used for the three controls
myPictureBox.Click += global_Click;
myLabel1.Click += global_Click;
myLabel2.Click += global_Click;
this.Click += global_Click;
}
void global_Click(object sender, EventArgs e)
{
if (MyControlClick != null)
MyControlClick(this);
}
}
Если у вас есть более важное количество объектов, вы можете положиться на этот ответ, чтобы создать действительно прозрачную панель, которая обрабатывает клики. Недостатком является то, что вам нужно будет определить, какой объект был HitTest
используя HitTest
на основе местоположения мыши.
На стороне формы:
aControl.MyControlClick += aControl_MyControlClick;
// ...
// This code is triggered when a MyUserControl is clicked
void aControl_MyControlClick(MyUserControl ctl)
{
MessageBox.Show(ctl.ID);
}
На самом деле! Вы не можете поднять какое-либо событие в элемент Usercontrol, если вам не нужно применять собственный метод к вашему usercontrol или вы можете отключить элемент в usercontrol, но он изменит цвет этого элемента, но он поднимет событие клика, когда вы нажмете на свой контроль.