如何实现 两个窗体间的 实时传值
1个回答
展开全部
有两个窗体MainForm,SubForm,我们希望SubForm向MainForm实施传递数据,开发语言就用.net C#
1、新建一个工程,并添加两个窗体,分别命名为frmMain,frmSub
2、在frmMain上添加一个文本框和一个按钮,分别命名txbxReceiveMessageContainer和btnOpenSubForm
3、在frmSub上添加一个文本框和一个按钮,分别命名txbxSendMessageContainer和btnSendMessage
4、在工程中添加一个类文件,取名为Global,用于放置一些公用代码
做好了以上准备工作,下面开始编写代码,为方便大家阅读,我把关键代码直接贴上来。
//Global.cs
public class SubFormEventArg : System.EventArgs//事件数据,其中构造函数中的参数是object类型,也就是说我们可以在两个窗体间传递任何数据,如数组,字符串,结构体以及其他任何复杂的数据形式
{
private readonly object myObj;
public SubFormEventArg (object myObj)
{
this.myObj = myObj;
}
public object MyMessage
{
get
{
return myObj;
}
}
}
public class FormHandel
{
public static int[] myFormHandel ={ 1, 2 };//根据需要而定,如果是在三个窗体间传递数据的话,可以定义三个数据{1,2,3}
}
public delegate void MessageChangeEventHander(object sender, SubFormEventArg e);//很关键,用于两个窗体间互通消息
//frmMain.cs
在frmMain构造函数中添加:
FormHandel.myFormHandel[0] = (int)this.Handle;
添加消息处理函数,即怎么处理frmSum传递过来的数据
public void OnMessageChange(object sender, Form2EventArg e)
{
//处理消息(e.MyMessage)的代码,值得注意的是,由于e.MyMessage是object类型,此处需要根据你传递的数据的类型进行拆箱(即我们通常所说的强制转换),例如如果传递的是字符串数组,则可以string[] message = (string[])e.MyMessage,然后再处理message
this.txbxReceiveMessageContainer.Text = e.MyMessage.ToString();
}
在btnOpenSubForm的click事件中添加frmSum的调用函数:
frmSub frm = new frmSub();
frm.MessageChange += new MessageChangeEventHander(OnMessageChange);//很重要,用于注册消息处理函数
frm.Show();
//frmSub.cs
定义一个窗体级事件变量
public event MessageChangeEventHander MessageChange;
在btnSendMessage的click事件中添加消息发送代码
MessageChange(this, new SubFormEventArg (this.txbxSendMessageContainer.Text));
ok,所有工作完毕,编译,运行,ok。
1、新建一个工程,并添加两个窗体,分别命名为frmMain,frmSub
2、在frmMain上添加一个文本框和一个按钮,分别命名txbxReceiveMessageContainer和btnOpenSubForm
3、在frmSub上添加一个文本框和一个按钮,分别命名txbxSendMessageContainer和btnSendMessage
4、在工程中添加一个类文件,取名为Global,用于放置一些公用代码
做好了以上准备工作,下面开始编写代码,为方便大家阅读,我把关键代码直接贴上来。
//Global.cs
public class SubFormEventArg : System.EventArgs//事件数据,其中构造函数中的参数是object类型,也就是说我们可以在两个窗体间传递任何数据,如数组,字符串,结构体以及其他任何复杂的数据形式
{
private readonly object myObj;
public SubFormEventArg (object myObj)
{
this.myObj = myObj;
}
public object MyMessage
{
get
{
return myObj;
}
}
}
public class FormHandel
{
public static int[] myFormHandel ={ 1, 2 };//根据需要而定,如果是在三个窗体间传递数据的话,可以定义三个数据{1,2,3}
}
public delegate void MessageChangeEventHander(object sender, SubFormEventArg e);//很关键,用于两个窗体间互通消息
//frmMain.cs
在frmMain构造函数中添加:
FormHandel.myFormHandel[0] = (int)this.Handle;
添加消息处理函数,即怎么处理frmSum传递过来的数据
public void OnMessageChange(object sender, Form2EventArg e)
{
//处理消息(e.MyMessage)的代码,值得注意的是,由于e.MyMessage是object类型,此处需要根据你传递的数据的类型进行拆箱(即我们通常所说的强制转换),例如如果传递的是字符串数组,则可以string[] message = (string[])e.MyMessage,然后再处理message
this.txbxReceiveMessageContainer.Text = e.MyMessage.ToString();
}
在btnOpenSubForm的click事件中添加frmSum的调用函数:
frmSub frm = new frmSub();
frm.MessageChange += new MessageChangeEventHander(OnMessageChange);//很重要,用于注册消息处理函数
frm.Show();
//frmSub.cs
定义一个窗体级事件变量
public event MessageChangeEventHander MessageChange;
在btnSendMessage的click事件中添加消息发送代码
MessageChange(this, new SubFormEventArg (this.txbxSendMessageContainer.Text));
ok,所有工作完毕,编译,运行,ok。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询