winform独立窗体之间传值的简单方法
2021-03-30 05:24
标签:通信 多用户 void ext 总结 绑定 注册 btn rgs 最近做一个多窗体联动的小程序,用到了窗体间传值。 网络上到处都是父窗体和子窗体之间传值的方法,总结起来有 1、有参数的构造函数, 2、委托 以委托为例,父窗体如果想要发送信息给子窗体,只需要在父窗体中定义好事件。 然后在实例化子窗体时,将子窗体内接受消息的函数绑定至该事件即可 需要发送消息时,执行事件的invoke函数即可。 同样道理,子窗体如果要向父窗体发送消息,就需要在子窗体内定义事件,然后由父窗体注册。需要发送消息时在子窗体内执行Invoke函数即可。 不难看出,上述过程依赖于子窗体的实例化阶段。 现在出现这种情况,由父窗体(“学生论坛”)分别建立两个子窗体“办公室”、“图书馆”。 这两个子窗体互相之间没有所谓“父子”关系,那么如何互相通信呢? 下面提供一种简单的方法,通过将控件(也可以扩展至其他数据结构)装入属性中的方式来实现效果。 在其中一个子窗体内,公开控件的赋值方法 然后在另外一个子窗体内,发送消息的button_click事件中,遍历当前所有父窗体的子窗体,并找到自己要发送消息的那个窗体,通过赋值给Str的方式,实现独立窗体之间传值。 最后实现效果如下: 这里只是提供一种简单的独立窗体之间的传值方法。当然还有其他方法,例如遇到类似多用户聊天的时候,就不能采用这种方法。 可以采用诸如: 1、公共数据类,定时器查询刷新; 2、事件驱动,重写自定义事件。 抛砖引玉,欢迎大家来讨论! winform独立窗体之间传值的简单方法 标签:通信 多用户 void ext 总结 绑定 注册 btn rgs 原文地址:https://www.cnblogs.com/nEoo/p/9286744.html//str为发送内容,formName为指定要发送给的窗体名字
public delegate void ReceiveMsg(string str,string formName);
public event ReceiveMsg receiveMsg;
frm4 f = new frm4();
this.receiveMsg += f.GetMsg;
f.Show();
//发送给办公室
private void BangongshiBtn_Click(object sender, EventArgs e)
{
receiveMsg.Invoke("\n来自学生论坛的消息!!!\n" + this.comboBox1.Text, "frm4");
}
private string str;
public string Str
{
get { return str; }
set { str = value; this.richTextBox1.AppendText(str); }
}
//发送给办公室
private void button2_Click(object sender, EventArgs e)
{
foreach (Form item in Application.OpenForms)
{
if (item.Name == "frm4")
{
((frm4)item).Str = "\n来自图书馆的消息:\n" + this.comboBox1.Text + "\n";
}
}
}
上一篇:C# 不能用于文件名的字符
文章标题:winform独立窗体之间传值的简单方法
文章链接:http://soscw.com/index.php/essay/69839.html