2016-06-07 3 views
0

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

Текущий код формы ...

public partial class Form1 : Form 
    { 

     DualCombo dc = new DualCombo(); 
     public Form1() 
     { 
      InitializeComponent(); 
      this.Controls.Add(dc); 
     } 

     private void MyMethod() 
     { 
      MessageBox.Show(dc.c1.Text + dc.c2.Text); 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 



     } 
    } 

управления, который содержит 2 моих пользовательских комбо ...

public class DualCombo : UserControl 
    { 
     public CustomCombo c1 = new CustomCombo(); 
     public CustomCombo c2 = new CustomCombo(); 
     public DualCombo() 
     { 

       c1.Items.Add("One"); 
       c1.Items.Add("Two"); 
       c1.Items.Add("Three"); 


       c2.Left = c1.Right; 
       c2.Items.Add("One"); 
       c2.Items.Add("Two"); 
       c2.Items.Add("Three"); 

      this.Controls.Add(c1); 
      this.Controls.Add(c2); 
     } 

    } 

Я покинул код из пользовательского комбо пустым, чтобы сохранить Пример простой ...

public class CustomCombo : ComboBox 
    { 


    } 

Я бы хотел, чтобы моя пользовательская комбинация OnSelectedIndex изменилась, чтобы вызвать следующее: ThOD то есть в форме ...

private void MyMethod() 
      { 
       MessageBox.Show(dc.c1.Text + dc.c2.Text); 

      } 

ответ

2

Самое простое решение, чтобы подписаться на это событие непосредственно:

public Form1() 
{ 
    InitializeComponent(); 
    this.Controls.Add(dc); 
    dc.c1.SelectionChangedEvent += (s, e) => MyMethod(); 
} 

Но это плохая идея, чтобы сделать c1 общественности, читайте дальше.


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

Добавить событие UserControl

public EventHandler SomeEvent; 
protected void OnSomeEvent() => SomeEvent?.Invoke(this, EventArgs.Empty); 

огня, когда выбор изменяется внутри UserControl

protected CustomCombo c1 = new CustomCombo(); 
public DualCombo() 
{ 
    c1.SelectedIndexChanged += (s, e) => OnSomeEvent(); 
    ... 
} 

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

DualCombo dc = new DualCombo(); 
public Form1() 
{ 
    InitializeComponent(); 
    this.Controls.Add(dc); 
    dc.SomeEvent += (s, e) => MyMethod(); // call your method 
} 

Советы: не производить контроль внутри UserControlpublic. Подумайте о UserControl как о черном ящике.

+0

Спасибо за подробный ответ. Однако я не вижу OnSomeEvent в текущем контексте. – user3755946

+0

Где вы? Возможно, вы написали по ошибке 'dc.OnSomeEvent + = ...' (должно быть 'dc.SomeEvent + = ...')? – Sinatr

+0

он находится в двойной комбинации c1.SelectedIndexChanged + = (s, e) => OnSomeEvent(); – user3755946