我制作了一个自定义控件,其中有一个按钮。 现在点击此按钮,我想将一些数据发送到显示自定义控件并显示数据的父表单。
如何将数据从customcontrol.cs发送到parentForm.cs?
答案 0 :(得分:1)
通常控制火灾事件以通知父级。这样你的控件就不需要了解它的父级了。数据可以作为属性公开,或者(如果数据与事件相关)作为事件参数公开。
现有的例子是:
MouseDown
事件,其中MouseEventArgs
包含"鼠标的位置" TextChanged
的{{1}}事件,其中没有数据作为参数,但让父母检查TextBox
属性答案 1 :(得分:1)
您需要编写委托,事件和事件处理程序。在自定义控件类中定义委托和事件,并在主代码中添加一个事件处理程序,该事件处理程序在自定义控件中定义的事件中显示。
互联网上已有很多例子。
将其添加到您的自定义控制代码中:
public class MyEventArgs : EventArgs
{
public string msg="";
public MyEventArgs(string s){
msg=s;
}
}
// Delegate declaration.
public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler myHandler;
protected virtual void OnUpdate(MyEventArgs e)
{
MyEventHandler handler = myHandler;
if (handler != null)
{
// Invokes the delegates.
handler(this, e);
}
}
如果您需要通知订阅者您自定义控件中的某些事件,请调用OnUpdate函数 ... //更新订阅者 OnUpdate(新的MyEventArgs(" Hello")); //以上将调用事件订阅者
主代码中的:
...
//global?
CustomControl myCC=new CustomControl();
//add after InitializeComponents?
myCC+=new myEventHandler(myEventhandlerMethod);
...
//need to add a new myEventhandlerMethod that matches the delegate definition
public void myEventHandlerMethod(object sender, MyEventArgs e){
//here you get when the custom control fires the event in OnUpdate...
}
我希望我描述尽可能简单。 来源:https://msdn.microsoft.com/en-us/library/9aackb16%28v=vs.90%29.aspx