winform独立窗体之间传值的简单方法

Posted neoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform独立窗体之间传值的简单方法相关的知识,希望对你有一定的参考价值。

最近做一个多窗体联动的小程序,用到了窗体间传值。

网络上到处都是父窗体和子窗体之间传值的方法,总结起来有

1、有参数的构造函数,

2、委托

以委托为例,父窗体如果想要发送信息给子窗体,只需要在父窗体中定义好事件。

//str为发送内容,formName为指定要发送给的窗体名字
public delegate void ReceiveMsg(string str,string formName);
public event ReceiveMsg receiveMsg;   

然后在实例化子窗体时,将子窗体内接受消息的函数绑定至该事件即可

 frm4 f = new frm4();
 this.receiveMsg += f.GetMsg;
 f.Show();      

需要发送消息时,执行事件的invoke函数即可。

  //发送给办公室
        private void BangongshiBtn_Click(object sender, EventArgs e)
        {
            receiveMsg.Invoke("
来自学生论坛的消息!!!
" + this.comboBox1.Text, "frm4");
        }

同样道理,子窗体如果要向父窗体发送消息,就需要在子窗体内定义事件,然后由父窗体注册。需要发送消息时在子窗体内执行Invoke函数即可。

 

不难看出,上述过程依赖于子窗体的实例化阶段。

现在出现这种情况,由父窗体(“学生论坛”)分别建立两个子窗体“办公室”、“图书馆”。

技术分享图片

 

这两个子窗体互相之间没有所谓“父子”关系,那么如何互相通信呢?

下面提供一种简单的方法,通过将控件(也可以扩展至其他数据结构)装入属性中的方式来实现效果。

 在其中一个子窗体内,公开控件的赋值方法

 private string str;
        public string Str
        {
            get { return str; }
            set { str = value; this.richTextBox1.AppendText(str); }
        }

然后在另外一个子窗体内,发送消息的button_click事件中,遍历当前所有父窗体的子窗体,并找到自己要发送消息的那个窗体,通过赋值给Str的方式,实现独立窗体之间传值。

 //发送给办公室
        private void button2_Click(object sender, EventArgs e)
        {
            foreach (Form item in Application.OpenForms)
            {
                if (item.Name == "frm4")
                {
                    ((frm4)item).Str = "
来自图书馆的消息:
" + this.comboBox1.Text + "
";
                }
            }           
        }

最后实现效果如下:

技术分享图片

 

这里只是提供一种简单的独立窗体之间的传值方法。当然还有其他方法,例如遇到类似多用户聊天的时候,就不能采用这种方法。

可以采用诸如:

1、公共数据类,定时器查询刷新;

2、事件驱动,重写自定义事件。

抛砖引玉,欢迎大家来讨论!

 

以上是关于winform独立窗体之间传值的简单方法的主要内容,如果未能解决你的问题,请参考以下文章

2019-3-26WinForm窗体间如何传值的几种方法

WinForm窗体间传值的方法

观察者模式的应用:Winform窗体之间传值

winform 窗体之间的操作

Winform中利用委托实现窗体之间的传值

WPF C#怎么窗体间传值