2016-10-28 4 views
0

У меня есть элемент управления пользователя, на котором есть три метки. Я хотел бы, чтобы событие click на родительской форме было поднято, когда элемент управления щелкнут в любой точке холста, даже в ярлыках. Его как кнопка с 3 ярлыками ... прямо сейчас она только поднимет родительское событие, когда будет нажата часть основного холста, но при нажатии на ярлыки не будет пузыриться. Во-первых, в конструкторе я назначаю обработчики событий:Пользовательский контроль с несколькими ручками управления щелчком

public partial class RunCodeButton : UserControl 
{ 
    public event EventHandler ButtonClick; 

    public RunCodeButton() 
    { 
     InitializeComponent(); 
     LblCode.Click += RunCodeButton_Click; 
     LblCount.Click += RunCodeButton_Click; 
     LblDescription.Click += RunCodeButton_Click; 
    } 
} 

Тогда я защелкивающийся событие управления пользователя добавляется к классу:

private void RunCodeButton_Click(object sender, EventArgs e) 
    { 
     ButtonClick?.Invoke(this, e); 
    } 

затем в основной форме (а не пользовательский элемент управления), я добавить событие щелчка, когда я произвожу кнопку:

_button.Click += Button_Click; 
private void Button_Click(object sender, EventArgs e) 
{ 
     Result = DialogResult.OK; 
     RunCode = (Codes_Run)((RunCodeButton)sender).Tag; 
     Close(); 
} 

если я установить точку останова в пользовательские элементы управления выберите событие и нажмите на этикетке. Он вызывает событие, но «ButtonClick» всегда имеет значение null, и он останавливается.

Есть ли способ сделать элементы управления пользователя дочерними элементами управления щелчком мыши?

+0

Это winforms или WPF? –

+0

Winforms. Извините – rigamonk

+0

[Передать событие перехода дочернего элемента управления в родительский элемент управления] (http://stackoverflow.com/a/36130796/3110834) –

ответ

1

Добавить

_button.ButtonClick += Button_Click; 

вокруг линии

_button.Click += Button_Click; 

Хотя вы даже не нужно _button.ButtonClick. Просто сделайте

private void RunCodeButton_Click(object sender, EventArgs e) 
{ 
    Click?.Invoke(this, e); 
} 
Смежные вопросы