本篇文章为大家展示了C#中怎么实现窗体传值,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了马尾免费建站欢迎大家使用!
公共属性
我们可以在子窗体里面定义一个公共的属性,然后在父窗体里面给公共属性赋值,这样可以实现窗体之间传值,子窗体代码如下:
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#中怎么实现窗体传值,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
分享标题:C#中怎么实现窗体传值
文章位置:https://www.cdcxhl.com/article40/poseho.html
成都网站建设公司_创新互联,为您提供网站改版、企业网站制作、企业建站、微信小程序、、App设计
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联