读书人

winform中一个自定义控件调用父窗体中

发布时间: 2012-12-23 11:28:15 作者: rapoo

winform中一个自定义控件调用父窗体中的事件
我有一个自定义的控件UCTextInput,
在窗体Route中通过this.panel1.Controls.Add(UCTextInput);产生了自定义的控件。

现在的问题是我要在UCTextInput里面的一个button单击事件中调用Route中原本就有的控件,和事件,请问怎么弄啊?
[最优解释]
我只能说楼上的宝马和老虎说的很具体了


//1定义个委托用来掉方法 MyEventArgs类要你自己写里面可以加些你认为有用的属性,不想用的话可以不加这个参数,
public delegate void 相关事件的委托(object sender, MyEventArgs e);
//2定义事件 这句话写在你的控件的类的里面作为个字段,注册事件时要用的
public event 相关事件的委托 相关事件;
//3你的用户控件button事件
private void btn_Click(object sender, EventArgs e)
{
//各种逻辑代码...
MyEventArgs ma=new MyEventArgs();
相关事件(this,ma);
}

下面是你调用用户控件的地方的代码

//这句话在你写完+=后按两下tab键,后面的东西会自动生成
你的用户控件.相关事件 += new 相关事件的委托(事件);
事件((object sender, MyEventArgs e)
{
//这里面写你的“调用Route中原本就有的控件,和事件”相关逻辑代码了.
}

不知道说清楚了没有,我表达能力有限……
[其他解释]
引用:
引用:我只能说楼上的宝马和老虎说的很具体了
C# code?123456789101112//1定义个委托用来掉方法 MyEventArgs类要你自己写里面可以加些你认为有用的属性,不想用的话可以不加这个参数,public delegate void 相关事件的委托(object sender, MyEventArgs e);/……

貌似我误导你了?委托是跟类是一个级别的,定义委托时别写到类里面,否则你在父窗体为用户控件注册事件时会出问题。
你自定义控件里面就是放你的那个事件啊
注意以下代码要写到你的用户控件内

//2定义事件 这句话写在你的控件的类的里面作为个字段,注册事件时要用的
public event 相关事件的委托 相关事件;
//3你的用户控件button事件
private void btn_Click(object sender, EventArgs e)
{
//就这一句就够了,当你在执行代码的时候这句话就是调用的你父窗体里为自定义控件所注册的事件
相关事件(this,ma);
}

我给你写的那两段不是都说明了代码的位置吗?怎么你写的时候又把代码写错位置了。。。。
我建议你看下委托和事件的相关资料,你貌似对这个不是很明白所以写起来比较乱
[其他解释]
1.在UCTextinput中将你的button1设为public
2.在主窗体中


this.panel1.Controls.Add(UCTextInput);
this.UCTextInput.Button1.Onclick+=aaaa(object s,evntargs e);
void aaa(object s,evntargs e)
{
start();//你的方法。
}
[其他解释]
通过委托来进行调用。

[其他解释]
把事件内的代码写成方法,通过委托来调用。
[其他解释]
还是要定义事件委托,然后在子窗体内获取父窗体的实例对象,然后调用委托,
父窗体要公布对应的相关属性或者方法...
[其他解释]
事件不是调用,可以叫注册。
是调用事件中执行的方法。
[其他解释]
哦,我自定义事件命名习惯了~
[其他解释]
引用:
把事件内的代码写成方法,通过委托来调用。
能具体点吗?
[其他解释]
引用:

还是要定义事件委托,然后在子窗体内获取父窗体的实例对象,然后调用委托,
父窗体要公布对应的相关属性或者方法...
能具体点吗?
[其他解释]
引用:
我只能说楼上的宝马和老虎说的很具体了
C# code?123456789101112//1定义个委托用来掉方法 MyEventArgs类要你自己写里面可以加些你认为有用的属性,不想用的话可以不加这个参数,public delegate void 相关事件的委托(object sender, MyEventArgs e);//2定义事件 这句话写在你的控件的类的里面作为个……
这是我Route窗体里面的代码:

public delegate void startCamera(object sender);
public event startCamera Start;
/// <summary>
/// 拍照
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPic_Click(object sender, EventArgs e)
{
//......
Start();
}


那我自定义控件里面怎么写呢?
private void button1_Click(object sender, EventArgs e)
{

}

[其他解释]
我要在自定义控件中调用Route窗体中的btnPic_Click事件
[其他解释]
引用:
1.在UCTextinput中将你的button1设为public
2.在主窗体中


this.panel1.Controls.Add(UCTextInput);
this.UCTextInput.Button1.Onclick+=aaaa(object s,evntargs e);
void aaa(object s,evntargs e)
{
s……
貌似只有click事件,没有Onclick
[其他解释]
终于搞出来了,谢谢

读书人网 >C#

热点推荐