Огонь родительского события щелчка, когда ребенок нажимается в пользовательском элементе управления формы Windows - PullRequest
4 голосов
/ 29 апреля 2011

У меня есть пользовательский элемент управления

    public partial class ButtonControl : UserControl

, который имеет два элемента управления надписью и картинкой

        this.pictureBox1 = new System.Windows.Forms.PictureBox();
        this.text = new System.Windows.Forms.Label();

Я использовал этот элемент управления в форме окна

this.appointmentButton = new DentalSoft.UI.Controls.ButtonControl();

создал событие

            this.appointmentButton.Click += new System.EventHandler(this.appointmentButton_Click);

enter image description here

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

Ответы [ 2 ]

8 голосов
/ 30 апреля 2011

Да, это просто.Когда вы нажимаете на дочерние элементы управления, они получают событие click, а пользовательский - нет.Таким образом, вы можете подписаться на события щелчка дочернего элемента управления и, когда они происходят, просто вызвать событие щелчка usercontrol, и оно будет отображаться, чтобы щелкать независимо от того, где находится мышь.

Просто дважды щелкните на поле для рисунков и меткусоздайте обработчики событий click, затем добавьте строку кода для вызова родительского метода OnClick usercontrol.

    private void text_Click(object sender, EventArgs e)
    {
        this.OnClick(new EventArgs());
    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        this.OnClick(new EventArgs());
    }
0 голосов
/ 06 декабря 2018

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

    private void Label_Click(object sender, EventArgs e)
    {
        Label label = (Label)sender;
        Box_Click(label.Parent, e);
    }


    private void Box_Click(object sender, EventArgs e)
    {
        //
        PictureBox box = sender as PictureBox;

        //
        if (isMine[int.Parse(box.Name)])
        {
            box.Image = Image.FromFile(@"..\..\images\BoxRedX.jpg");
            MessageBox.Show("Game Over");
        }
        else
        {
            box.Image = Image.FromFile(@"..\..\images\BoxGray.jpg");
        }
    }

Как вы можете видеть, я беру ребенка и использую его для ссылки на его родителя и отправки его на событие щелчка родителей.Это код, который я использовал для работы в своем проекте.Важный метод является первым по перечисленным.Второй - для ясности, чтобы увидеть, как он прошел и работал.

...