Передать значение, выбранное из пользовательского элемента управления, в родительский элемент - PullRequest
0 голосов
/ 07 октября 2011

У меня есть диалоговое окно Winform, которое содержит несколько пользовательских элементов управления - все они являются своего рода Datagridview.Основной родитель имеет подробную информацию о пользователе, а пользовательские элементы управления имеют дополнительную информацию об этом человеке.Когда мой Dialog впервые загружает все элементы UserControls, я пытаюсь выяснить, как обновить UserControl2 на основе изменения позиции в UserControl1.

Итак, я пытаюсь выбрать строку в UserControl1 и получить данные в обновлении UserControl2 на основе только что выбранного значения.

Я попытался использовать MouseDownEvents в UserControl1 иBindingSourcePositionChanged но я не могу понять, как вернуть значение, выбранное обратно в родительскую форму, а затем использовать это значение для обновления других наборов данных?

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

Это правильное направление?Или есть другой способ сделать это?Кто-нибудь может предложить какие-либо предложения о том, как это работает?

1 Ответ

3 голосов
/ 07 октября 2011

Да, это правильный подход, что-то вроде следующего обеспечит обработчик событий, который вы можете использовать для извлечения открытого свойства из UserControl:

public class SomeClass : BaseControl
{
    public event EventHandler PersonSelected;

    public string Name{get;set;}

    protected void FindUser()
    {
        var find = new Button {ID = (ToString() + "search"), Text = "Search"};
            find.Click += delegate(object sender, EventArgs e)
                              {
                                  if (PersonSelected!= null)
                                  {
                                      //forward this event to the page's event handler
                                      PersonSelected(this, e);
                                  }
                              }; 
     }
}

public class SomeOtherClass : Page
{
    public void Main()
    {

       var sp = (SomeClass)Control;
                        sp.PersonSelected += BtnClick;
     }

    public void BtnClick(object sender, EventArgs e)
    {
        //Get some value from the (SomeClass)Control here
     }
}
...