c# 学习笔记 (2) 窗体之间互相调用的方法
创建一个winform工程
创建两个窗体
一个子窗体,一个父窗体,这里为了演示,子窗体和父窗体上都有一个文本框和按键,点击任意一个窗体上的按键,窗体上文本框的内容会同步到另外一个窗体的文本框上。
添加控件textbox和button,然后双击button,添加按键单击事件,子窗体类似。
父窗体向子窗体传值
最常见的方法就是子窗体中创建一个public方法,在父窗体中调用该方法将参数传递给子窗体
子窗体中声明一个txbPrint方法,将接收到的str显示在子窗体文本框内
public void txbPrint(string str)
{
txbInfo.Text = str;
}
父窗体
FormChild formChild = new FormChild();
private void FormMain_Load(object sender, EventArgs e)
{
formChild.Show();
}
private void btnSend_Click(object sender, EventArgs e)
{
formChild.txbPrint(txbInfo.Text);
}
子窗体向父窗体传值
方法一 通过静态字段传值
- 像上面父窗体向子窗体传值一样,子窗体也可以通过类似的方法向父窗体传值,不过一般不要这样用,会破坏代码封装性,别人看了会嫌弃的
在主窗体中添加一个静态字段,窗体加载时将this指针赋值给formMain,然后在子窗体中就可以通过静态字段formMain操作类中的public方法
//主窗体
public partial class FormMain : Form
{
public static FormMain formMain;
public FormMain()
{
InitializeComponent();
}
FormChild formChild = new FormChild();
private void FormMain_Load(object sender, EventArgs e)
{
formMain = this;
formChild.Show();
}
private void btnSend_Click(object sender, EventArgs e)
{
formChild.txbPrint(txbInfo.Text);
}
}
//子窗体
public partial class FormChild : Form
{
public FormChild()
{
InitializeComponent();
}
public void txbPrint(string str)
{
txbInfo.Text = str;
}
private void btnSend_Click(object sender, EventArgs e)
{
//通过静态字段传值
FormMain.formMain.txbPrint("txbInfo.Text");
}
}
方法二 通过委托传值
- 个人感觉C# 中的委托和C语言中的指针函数有点类似。
- 通过委托传值,首先声明一个委托类 本例子中 public delegate void SendLogDelegate(string str); 这个委托类可以生成 参数是string类型 没有返回值的委托,和C语言中声明指针函数类似
- 然后通过这个委托类在子窗体中实例化一个委托 public SendLogDelegate sendLogDelegate;
- 最后在主窗体中,实例化子窗体时,给委托 sendLogDelegate 赋值 txbPrint
- 然后在子窗体中使用该委托,就相当于调用了主窗体中的 txbPrint函数
//主窗体
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
FormChild formChild = new FormChild();
private void FormMain_Load(object sender, EventArgs e)
{
//给委托赋值 调用该委托即调用 txbPrint方法
formChild.sendLogDelegate = txbPrint;
formChild.Show();
}
private void btnSend_Click(object sender, EventArgs e)
{
formChild.txbPrint(txbInfo.Text);
}
public void txbPrint(string str)
{
txbInfo.Text = str;
}
}
//创建一个委托类 这个委托类可以 生成参数是string类型 没有返回值的委托
public delegate void SendLogDelegate(string str);
//子窗体
public partial class FormChild : Form
{
//实例化一个委托
public SendLogDelegate sendLogDelegate;
public FormChild()
{
InitializeComponent();
}
public void txbPrint(string str)
{
txbInfo.Text = str;
}
private void btnSend_Click(object sender, EventArgs e)
{
if(sendLogDelegate != null)
{
//调用委托
sendLogDelegate(txbInfo.Text);
}
}
}
方法三 传递简单参数
- 一些情况下,主窗体仅需要获取子窗体关闭后的一些简单状态,如true或者false,这里可以使用窗体中的自带的字段来解决 this.DialogResult ,这个一般用在关闭子窗体时,修改子窗体的 this.DialogResult ,然后在主窗体中检查子窗体的 DialogResult 来传递参数,用的不多。
转载:https://blog.csdn.net/weixin_42378319/article/details/115671214
查看评论