揭露潜在的控制事件

我有一个自定义控件中的combobox。 我怎样才能暴露特定的事件,如SelectedIndexChanged或KeyPress等等任何人/东西实现我的自定义控件?

4 Solutions collect form web for “揭露潜在的控制事件”

你可以像这样转发事件:

public event EventHandler SelectedIndexChanged { add { inner.SelectedIndexChanged += value; } remove { inner.SelectedIndexChanged -= value; } } 

您将需要将这些代码自己编码到控件中 – 用户控件不会自动提升其子控件的事件。 然后,您可以将您的实际控件交叉连接到用户控件的提升事件:

  public event EventHandler SelectedIndexChanged; private void OnSelectedIndexChanged(object sender, EventArgs e) { if (SelectedIndexChanged != null) SelectedIndexChanged(sender, e); } public UserControl1() { InitializeComponent(); cb.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged); } 

不幸的是,您需要为您感兴趣的每一件事情做到这一点。

一个非常简单的解决scheme,而不是自定义事件,将作为自定义控件的属性公开嵌套控件。 从那里你可以很容易地附加事件处理程序。 暴露儿童控制并不总是可取的,但取决于控制types和使用方式,它可能会起作用。

 //create an instance of my control MyCustomControl controlInstance = new MyCustomControl(); //attach and event handler to the exposed subcontrol controlInstance.SaveButton.Click += new EventHandler(SaveButton_Click); 

还有另一种方式来处理,通过devise师:

在devise器上,在您的自定义控件中,在“devise”下的combobox属性中将“修改器”设置为内部。

然后,你需要做些什么来添加:

 CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged; 

随着 :

 private void YourCombo_SelectedIndexChanged(object sender, EventArgs e) { // Code to execute when the SelectedIndexIsChanged goes here } 
  • Winforms - 单击/拖动表单中的任意位置,以便像在表单标题中单击一样移动它
  • 在面板内的控件之上绘制(C#WinForms)
  • 如何取消selectDataGridView控件中的所有选定的行?
  • C#获取控件在窗体上的位置
  • 我怎样才能在c#中进行数据绑定?
  • 如何使WinForms应用程序全屏显示
  • 隐藏C#TabControl上的Tab选项卡标题
  • 用于WinForms的function区UI控件
  • 是否适当扩展控制提供一贯安全的调用/ BeginInvokefunction?
  • winForms + DataGridView绑定到List <T>
  • string.Format()给出“inputstring格式不正确”