C # нажмите на элемент управления

1

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

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

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

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

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

Теги:
winforms
custom-controls

2 ответа

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);
    }
}

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

На стороне формы:

aControl.MyControlClick += aControl_MyControlClick;

// ...

// This code is triggered when a MyUserControl is clicked
void aControl_MyControlClick(MyUserControl ctl)
{
    MessageBox.Show(ctl.ID);
}
  • 0
    На самом деле я предпочитаю подключить одно и то же событие клика, это проще. Есть ли способ наследовать событие на дочерних элементах управления?
  • 0
    Я согласен :) Использование прозрачной панели стоит со многими элементами управления. Например, я использую этот проект, чтобы позволить пользователю перемещать и изменять размеры элементов управления, которые создаются динамически.
Показать ещё 6 комментариев
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню