窗体间的传值有很多方法,最简单的就是设置所有权方法。不过利用事件也是一种方法。顺便学习下事件.
1,建立两个窗体,Form1和Form2.Form1上有一个BUTTON控件,用于show出Form2.还有一个lable控件,用于看效果.form2上只有一个button控件,用于触发事件.
2,form1代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{//单击该按钮时SHOW出第二个窗体
Form2 fm2 = new Form2();
fm2.myevent += new Form2.mydelegate(gengxin);//在SHOW出窗体的同时订阅FORM2的事件,调用gengxin()方法.
fm2.ShowDialog();
}
public void gengxin() //用于修改label的方法
{
this.label1.Text = "改了吗";
}
}3,Form2代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace test
{
public partial class Form2 : Form
{ public delegate void mydelegate();//定义一个委托
public event mydelegate myevent;//定义上诉委托类型的事件
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//在单击该窗体上的按钮时触发事件
if(myevent!=null)
{
myevent();
}
}
}
}
}4,对事件了解不深,希望大家指教!
1,建立两个窗体,Form1和Form2.Form1上有一个BUTTON控件,用于show出Form2.还有一个lable控件,用于看效果.form2上只有一个button控件,用于触发事件.
2,form1代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{//单击该按钮时SHOW出第二个窗体
Form2 fm2 = new Form2();
fm2.myevent += new Form2.mydelegate(gengxin);//在SHOW出窗体的同时订阅FORM2的事件,调用gengxin()方法.
fm2.ShowDialog();
}
public void gengxin() //用于修改label的方法
{
this.label1.Text = "改了吗";
}
}3,Form2代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace test
{
public partial class Form2 : Form
{ public delegate void mydelegate();//定义一个委托
public event mydelegate myevent;//定义上诉委托类型的事件
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//在单击该窗体上的按钮时触发事件
if(myevent!=null)
{
myevent();
}
}
}
}
}4,对事件了解不深,希望大家指教!
if(lab!=null)
lab.Text="改了吗?";我一般用上面的方法.
public event mydelegate myevent;//定义上诉委托类型的事件
->public mydelegate myevent;
不知道event,在起什么作用?还请指点。
窗体的参数传递
http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5
public delegate void mydelegate(object sender, myEventArgs e);
其中myEventArgs是一个类,从EventArgs类继承下来的。在这个类中可以添加任何类型的自定义参数用于传值。在Form2中:
private void button1_Click(object sender, EventArgs e)
{
//在单击该窗体上的按钮时触发事件
if(myevent!=null)
{
myEventArgs e = new myEventArgs();
e.自定义参数1 = 值;
e.自定义参数2 = 值;
......
myevent(this, e);
}
}在Form1中:
public void gengxin(object sender, myEventArgs e) //用于修改label的方法
{
this.label1.Text = e.自定义参数;
}
Form2中这一句出错
[找不到类型或命名空间名称“mydelegate”(是否缺少 using 指令或程序集引用?)]