public delegate void getMessage(); public partial class UserControl1 : UserControl { public event getMessage GMS; public UserControl1() { InitializeComponent(); } protected void issuer() { if (GMS != null) GMS(); } private void button1_Click(object sender, EventArgs e) { this.issuer(); } }
public partial class Form1 : Form { public Form1() { InitializeComponent(); UserControl1 uc = new UserControl1(); uc.GMS += new getMessage(get); } private void Form1_Load(object sender, EventArgs e) { } public void get() { this.label1.Text = "尼玛"; } }
点击 按钮的时候label的之值没有变化 看了下是因为那个GMS事件为空,不知道它怎么为空的,求大哥指点
这是WinForm程序吗?我看了一下,你这个是没有搞清楚对象之间的关系导致,
public Form1() { InitializeComponent(); UserControl1 uc = new UserControl1(); uc.GMS += new getMessage(get); }
你这里Register的这个UserControl1和你界面上的UserControl1是两个不同的对象,你点击的是你界面上的,但是你注册的另外一个对象,你修改成这样子看看怎么样:
public Form1() { InitializeComponent(); UserControl1 uc = this.UserControl1;//不知道语法是不是这样子,希望意思能够明白。 uc.GMS += new getMessage(get); }
其他委托以及事件的语法没有问题。
或者直接这样子:
public Form1() { InitializeComponent(); this.UserControl1 .GMS += new getMessage(get); }
非常感谢 是个这个原因。
@行者之刃: 木事,木事,给分给分啊。。再多给点啊。。哈哈哈
@小AI: 只有五分哦,一人给点吧
public delegate void getMessage();这是委托
public event getMessage GMS;这是声明事件
uc.GMS += new getMessage(get);这是注册事件
public void get()这是处理函数
那么谁触发事件?
private void button1_Click(object sender, EventArgs e) { this.issuer(); }这个不是触发吗
@行者之刃: 这是谁的成员?
@行者之刃:
您的component有问题吧
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 uc = new Form2();
uc.Show();
uc.GMS += new getMessage(this.gett);
}
public void gett()
{
this.label1.Text = "ninhao";
}
}
public delegate void getMessage();
public partial class Form2 : Form
{
public event getMessage GMS;
public Form2()
{
InitializeComponent();
}
protected void issuer()
{
if (GMS != null)
GMS();
}
private void button1_Click(object sender, EventArgs e)
{
this.issuer();
}
}
@行者之刃: 是自定义控件。
看样子已经解决了