iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >C#开发如何Winform实现窗体间相互传值
  • 490
分享到

C#开发如何Winform实现窗体间相互传值

2023-06-29 14:06:42 490人浏览 安东尼
摘要

今天小编给大家分享一下C#开发如何winform实现窗体间相互传值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言我们

今天小编给大家分享一下C#开发如何winform实现窗体间相互传值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、前言

我们在做WinfORM窗体程序开发的时候,会经常遇到窗体之间相互传值。假设有下面的一个场景:一个主窗体和一个子窗体,点击主窗体上面的按钮给子窗体传值,并在子窗体上面显示出来,一般会有如下几种方式实现。

二、公共属性

我们可以在子窗体里面定义一个公共的属性,然后在父窗体里面给公共属性赋值,这样可以实现窗体之间传值,子窗体代码如下:

using System;using System.windows.Forms;namespace DelegateDemo{    public partial class frmChild : Form    {        public frmChild()        {            InitializeComponent();        }        // 定义一个公共属性,接收传递的值        public string strMessage { get; set; }        /// <summary>        /// 窗体加载        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void frmChild_Load(object sender, EventArgs e)        {            // 将接收到的值显示在窗体上            this.lblMessage.Text = strMessage;        }    }}

父窗体代码:

using System;using System.Windows.Forms;namespace DelegateDemo{    public partial class frmParent : Form    {        public frmParent()        {            InitializeComponent();        }        /// <summary>        /// 单击事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btn_Value_Click(object sender, EventArgs e)        {            frmChild child = new frmChild();            // 给窗体的公共属性赋值            child.strMessage = this.txtMessage.Text.Trim();            // 显示子窗体            child.Show();        }    }}

这种方式有一个缺点:属性需要设置为public,不安全

三、公共方法

我们还可以在子窗体里面定义一个方法,通过调用方法传值,子窗体代码如下:

using System;using System.Windows.Forms;namespace DelegateDemo{    public partial class frmChild : Form    {        public frmChild()        {            InitializeComponent();        }        // 定义一个公共属性,接收传递的值        //public string strMessage { get; set; }        // 定义属性为private        private string strMessage { get; set; }        /// <summary>        /// 给私有属性赋值        /// </summary>        /// <param name="strText"></param>        public void SetText(string strText)        {            strMessage = strText;        }        /// <summary>        /// 窗体加载        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void frmChild_Load(object sender, EventArgs e)        {            // 将接收到的值显示在窗体上            this.lblMessage.Text = strMessage;        }    }}

父窗体代码:

using System;using System.Windows.Forms;namespace DelegateDemo{    public partial class frmParent : Form    {        public frmParent()        {            InitializeComponent();        }        /// <summary>        /// 单击事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btn_Value_Click(object sender, EventArgs e)        {            #region 调用公共属性赋值            //frmChild child = new frmChild();            //// 给窗体的公共属性赋值            //child.strMessage = this.txtMessage.Text.Trim();            //// 显示子窗体            //child.Show();             #endregion            #region 调用方法赋值            frmChild child = new frmChild();            // 给窗体的公共属性赋值            child.SetText(this.txtMessage.Text.Trim());            // 显示子窗体            child.Show();             #endregion        }    }}

这种方式同样也有缺点:属性虽然是private的了,但是方法还是public的。

四、委托

上述两种方式都是不安全,下面我们使用委托来实现窗体之间传值。

1、定义一个委托

我们在主窗体里面定义一个有参无返回值的委托:

// 定义一个有参无返回值的委托private delegate void SendMessage(string strMessage);

2、实例化一个此委托类型的事件

在父窗体里面定义一个委托类型的事件:

// 定义一个委托类型的事件public event SendMessage sendMessageEvent;

委托与事件的关系,事件相对于委托更安全,更低耦合。委托是一个类型,事件是委托类型的一个实例。

3、定义要执行的方法

这里其实就是在子窗体里面定义一个给控件赋值的方法:

/// <summary>/// 给控件赋值的方法/// </summary>/// <param name="strValue"></param>public void SetValue(string strValue){    this.lblMessage.Text = strValue;}

4、将方法绑定到事件

frmChild child = new frmChild();// 将方法绑定到事件上sendMessageEvent += new SendMessage(child.SetValue);// 也可以使用下面的简写形式// sendMessageEvent += child.SetValue;child.Show();

5、触发委托

在按钮的点击事件里面触发委托:

if(sendMessageEvent!=null){      sendMessageEvent.Invoke(this.txtMessage.Text.Trim());}

上面的代码中使用的是自定义的委托,我们也可以使用.net 框架里面自带的Action泛型委托:

using System;using System.Windows.Forms;namespace DelegateDemo{        public partial class frmParent : Form    {        // 定义一个有参无返回值的委托        public delegate void SendMessage(string strMessage);        // 定义一个委托类型的事件        public event SendMessage sendMessageEvent;        public event Action<string> actionEvent;        public frmParent()        {            InitializeComponent();        }        /// <summary>        /// 单击事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btn_Value_Click(object sender, EventArgs e)        {            #region 调用公共属性赋值            //frmChild child = new frmChild();            //// 给窗体的公共属性赋值            //child.strMessage = this.txtMessage.Text.Trim();            //// 显示子窗体            //child.Show();             #endregion            #region 调用方法赋值            //frmChild child = new frmChild();            //// 给窗体的公共属性赋值            //child.SetText(this.txtMessage.Text.Trim());            //// 显示子窗体            //child.Show();             #endregion            #region 通过委托传值            //frmChild child = new frmChild();            //// 将方法绑定到事件上            //// sendMessageEvent += new SendMessage(child.SetValue);            //// 也可以使用下面的简写形式            //sendMessageEvent += child.SetValue;            //child.Show();            #endregion            #region 使用Action            frmChild child = new frmChild();            // 将方法绑定到事件上            actionEvent += child.SetValue;            child.Show();            #endregion            // 使用自定义委托            //if (sendMessageEvent!=null)            //{            //    sendMessageEvent.Invoke(this.txtMessage.Text.Trim());            //}            // 使用Action委托            if (actionEvent != null)            {                actionEvent.Invoke(this.txtMessage.Text.Trim());            }        }    }}

以上就是“C#开发如何Winform实现窗体间相互传值”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: C#开发如何Winform实现窗体间相互传值

本文链接: https://www.lsjlt.com/news/325242.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#开发Winform实现窗体间相互传值
    目录一、前言二、公共属性三、公共方法四、委托1、定义一个委托2、实例化一个此委托类型的事件3、定义要执行的方法4、将方法绑定到事件5、触发委托一、前言 我们在做Winform窗体程序...
    99+
    2024-04-02
  • C#开发如何Winform实现窗体间相互传值
    今天小编给大家分享一下C#开发如何Winform实现窗体间相互传值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言我们...
    99+
    2023-06-29
  • 如何实现WinForm窗体间交互
    这篇文章主要介绍如何实现WinForm窗体间交互,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在窗体间传递数据的方法比较多:1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来...
    99+
    2023-06-17
  • VB.NET如何实现窗体传值
    这篇文章给大家分享的是有关VB.NET如何实现窗体传值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。VB.NET是由微软公司开发的一款专门面向对象的编程语言。可以帮助开发人员创造一个稳固性极强的开发环境,帮助编程...
    99+
    2023-06-17
  • C#如何实现不同窗体之间传递参数
    今天小编给大家分享一下C#如何实现不同窗体之间传递参数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C#不同窗体之间传递参数...
    99+
    2023-07-05
  • Javascript如何在两个窗体之间传值
    本篇内容主要讲解“Javascript如何在两个窗体之间传值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript如何在两个窗体之间传值”吧!如我们新建窗体 FatherPage.h...
    99+
    2023-06-27
  • C#实现不同窗体之间传递参数
    目录C#不同窗体之间传递参数1.父窗口向子窗口传递参数2.子窗口向父窗口传递参数3.代码说明C#子窗体与父窗体之间的参数传输1.子窗体传父窗体2.父窗体传子窗体总结C#不同窗体之间传...
    99+
    2023-02-26
    C#传递参数 C#不同窗体 C#窗体传递参数
  • 使用Spring如何实现页面的相互传值
    这篇文章给大家介绍使用Spring如何实现页面的相互传值,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、从页面接收参数spring MVC接收请求提交的参数值的几种方法:使用HttpServletRequest获取。...
    99+
    2023-05-31
    spring 相互
  • C#Windows应用程序开发实现窗体控件
    本篇内容主要讲解“C#Windows应用程序开发实现窗体控件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#Windows应用程序开发实现窗体控件”吧!通常windows应用程序都有相似的特征...
    99+
    2023-06-18
  • C#如何实现窗体里调用
    小编给大家分享一下C#如何实现窗体里调用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C#语言还是比较常见的东西,这里我们主要介绍C#窗体里调用,包括介绍在窗体里...
    99+
    2023-06-17
  • c语言如何实现两个值互相交换的函数
    小编给大家分享一下c语言如何实现两个值互相交换的函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c语言中实现两个值互换的函数。#include <...
    99+
    2023-06-15
  • C++如何实现与Lua相互调用
    今天小编给大家分享一下C++如何实现与Lua相互调用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。概述从本质上来看,其实说是...
    99+
    2023-07-05
  • C和C++如何实现互相调用详解
    目录前言1、为什么会有差异?2、extern “C”3、C++调用C正确方式4、C调用C++补充:C/C++文件之间函数的引用总结前言 在项目开发过程中,我们...
    99+
    2023-01-10
    c++中调用c c和c++混合编译 c语言能调用c++吗
  • 详解C#如何实现窗体换肤
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-31
    C#实现窗体换肤 C#窗体换肤 C#窗体
  • C#中如何实现Setting保存窗体
    这篇文章将为大家详细讲解有关C#中如何实现Setting保存窗体,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C# Setting步骤一:打开项目属性窗口,切换到设置(Settings)标签,如下图添加属...
    99+
    2023-06-18
  • C/C++ Qt TabWidget如何实现多窗体创建
    这篇文章主要为大家展示了“C/C++ Qt TabWidget如何实现多窗体创建”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/C++ Qt TabWi...
    99+
    2023-06-21
  • angularJS如何实现自定义指令间的相互交互
    小编给大家分享一下angularJS如何实现自定义指令间的相互交互,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AngularJ...
    99+
    2024-04-02
  • C#如何实现汉字之间互换
    今天就跟大家聊聊有关C#如何实现汉字之间互换,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。计算机中第一层的数据都是用二进制及0和1来表示的。每个0或1称作1位,第8位二进制数叫做1个...
    99+
    2023-06-17
  • 如何实现springboot中controller之间的相互调用
    springboot controller之间相互调用 SpringBoot之间内部调用 @Autowired private RestTemplate restTemplat...
    99+
    2024-04-02
  • C#如何实现在窗体上的统计图
    小编给大家分享一下C#如何实现在窗体上的统计图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下忽然要用到C#来制作统计图,起初不太清除怎么弄,看了一些代...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作