C#中winfrom窗体之间传值的几种实现方法:从初级到高级不同的实现方法。
1、把子窗体的接收框改变成public。让外部可以访问。。。。(这是最菜的办法)
因为要把子窗体的内部对象公开,所以不符合代码原则。
2、在子窗体中加一个公开的方法,让外部调用( 对修改关闭,对扩展开放)
3、用委托升级
-----------------------------------下面上代码------------------------------
父窗体代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Demo
{
public partial class ParentFrm : Form
{
//定义委托
public Action<string> atcSend { get; set; }
private ChildFrm ChildFrm { get; set; }//低级办法
public ParentFrm()
{
InitializeComponent();
}
private void ParentFrm_Load(object sender, EventArgs e)
{
ChildFrm frm = new ChildFrm();
ChildFrm = frm;//低级办法
//子窗体弹出来之前关注父窗体的消息变化
atcSend += frm.TextStr;
frm.Show();
}
private void btnSend_Click(object sender, EventArgs e)
{
//1、第一种
//ChildFrm.txtMassage.Text = this.txtMassage.Text;
//2、第二种
//ChildFrm.TextStr(this.txtMassage.Text);
//3、第三种
if (atcSend == null)
{
return;
}
atcSend(this.txtMassage.Text);
}
}
}
子窗体代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Demo
{
public partial class ChildFrm : Form
{
public ChildFrm()
{
InitializeComponent();
}
public void TextStr(string text)
{
this.txtMassage.Text = text;
}
}
}
还可以进一步更改成用事件传递消息。。。。(也是基于委托)