在我的其他自定义控件中从我的自定义控件调用我的表单方法
Invoke my forms method from my custom control within my other custom control
在此处查看并找到了几个示例,但它们似乎不符合我的确切问题,并且通过实验我无法解决。
表格的当前代码...
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 以触发以下形式的方法...
private void MyMethod()
{
MessageBox.Show(dc.c1.Text + dc.c2.Text);
}
最简单的解决方案是直接订阅该事件:
public Form1()
{
InitializeComponent();
this.Controls.Add(dc);
dc.c1.SelectionChangedEvent += (s, e) => MyMethod();
}
但是 c1
public 这不是个好主意,请继续阅读。
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
}
提示:不要在UserControl
public
里面制作控件。将 UserControl
视为一个黑盒子。
在此处查看并找到了几个示例,但它们似乎不符合我的确切问题,并且通过实验我无法解决。
表格的当前代码...
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 以触发以下形式的方法...
private void MyMethod()
{
MessageBox.Show(dc.c1.Text + dc.c2.Text);
}
最简单的解决方案是直接订阅该事件:
public Form1()
{
InitializeComponent();
this.Controls.Add(dc);
dc.c1.SelectionChangedEvent += (s, e) => MyMethod();
}
但是 c1
public 这不是个好主意,请继续阅读。
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
}
提示:不要在UserControl
public
里面制作控件。将 UserControl
视为一个黑盒子。