2014-11-02 3 views
1

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

Щелчок работает отлично, единственная проблема заключается в том, что мне нужно щелкнуть по фону элемента управления, и если я нажимаю на фотокамеру, не работает.

Я добавил событие on click для элемента управления, но я хотел бы нажать на него во всех местах, чтобы вызвать событие, а не только фон панели.

Я думал о добавлении прозрачного объекта, который полностью охватывает элемент управления. Мне на самом деле не нравится эта идея, однако, я пробовал с Picturebox, но я не вижу ее. Это непрозрачно. Я могу просто увидеть фон панели, но он охватывает метки и изображение.

Спасибо за поддержку.

ответ

3

Если у вас есть только несколько объектов на панели, вы можете подключить событие 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); 
    } 
} 

Если у вас есть более важное количество объектов, вы можете рассчитывать на this answer, чтобы создать действительно прозрачную панель, которая обрабатывает щелчки. Недостатком является то, что вам нужно будет определить, какой объект был нажат, используя HitTest на основе местоположения мыши.

С формальной стороны:

aControl.MyControlClick += aControl_MyControlClick; 

// ... 

// This code is triggered when a MyUserControl is clicked 
void aControl_MyControlClick(MyUserControl ctl) 
{ 
    MessageBox.Show(ctl.ID); 
} 
+0

На самом деле я предпочитаю подключать одно и то же событие click. Это проще. Есть ли способ наследовать событие для дочерних элементов управления? –

+0

Я согласен :) Использование прозрачной панели стоит со многими элементами управления. Например, я использую это проект, позволяющий пользователю перемещаться и изменять размеры элементов управления, которые создаются динамически. – Larry

+0

Я создаю список серверов для игры, и каждый сервер получил имя сервера, motd и логотип/изображение. поэтому этот настраиваемый элемент управления содержит эти три элемента, и вы можете щелкнуть там, где хотите активировать действие «выбрать сервер». Мне бы очень понравилось, если есть что-то, что можно было бы автоматизировать для назначения кликов. что-то вроде того, что дети наследуют от родителя ... –

0

На самом деле! Вы не можете поднять какое-либо событие в элемент Usercontrol, если вам не нужно применять собственный метод к вашему usercontrol или вы можете отключить элемент в usercontrol, но он изменит цвет этого элемента, но он поднимет событие клика, когда вы нажмете на свой контроль.

Смежные вопросы