子窗体向父窗体控件传值

在写程序的时候用到了由子窗体确定参数后返回给父窗体。这就涉及到窗体间传值的问题。C#是不提供窗体间变量和控件的直接相互调用(就是说即使Form1的变量和控件属性都设为Public或者Internal,在Form2种也不能通过 Form1.变量 或者 Form1.控件 的形式调用)。在C#中窗体都是类的对象形式出现,在New之后出现的窗体已经和初始的窗体是完全不同的实例。

通过查找资料,有两种方便的方法可实现传值目的。下面举例说明:

Form1是第一个窗体,包括Button11,Button12两个按钮。Button11点击事件产生Form2 窗体。

Form2是第二个窗体,包括Button21一个按钮。Button21 点击事件改变Button11和Button12的Text属性。

1、公用静态变量

首先在Form1种定义一个静态变量来得到Button11

public/internal static Button pButton;

然后在Form1_Load中赋值:

pButton=Button11;

此时就可以在Button11的事件中写如下代码来实现Form2

Form2 pForm2=new Form2();

pForm2.Show();

最后就可以在Form2 的Button21事件中来传递值

Form1.pButton.Text = "哈哈";

2、委托

该方法稍微麻烦点,首先要把Form1 的Button12的Modifiers属性修改为Public或者Internal。

然后前面Form1的Button11的事件中Form2实例化代码需要修改为:

Form2 pForm2=new Form2(this);

最后在Form2的Button21点击事件中写代码为:

Form1 pForm1 = new Form1();
pForm1 = (Form1)this.Owner;
pForm1.button2.Text = "Hello";

这样子就完成了控件值的传递了。

在 WinForms 中,可以使用以下步骤将窗体的值传递给父窗体: 1. 在窗体中定义一个公共的属性,用于保存要传递的值。 2. 在窗体中创建一个公共的方法,用于将需要传递的值设置到属性中。 3. 在父窗体中创建一个公共的方法,用于接收窗体传递的值。 4. 在父窗体中创建窗体的实例,并调用窗体的设置值方法。 5. 在窗体关闭时,调用父窗体的接收值方法,以便在父窗体中更新相应的控件。 以下是示例代码: 在窗体中定义公共属性和方法: ```c# public partial class ChildForm : Form { private int value; public void SetValue(int val) { value = val; } } ``` 在父窗体中定义公共方法: ```c# public partial class MainForm : Form { public void UpdateValue(int val) { // 在这里更新父窗体中需要显示窗体值的控件 } } ``` 在父窗体创建窗体实例并调用设置值方法: ```c# ChildForm childForm = new ChildForm(); childForm.SetValue(123); childForm.ShowDialog(); ``` 在窗体关闭时,调用父窗体的接收值方法: ```c# private void ChildForm_FormClosed(object sender, FormClosedEventArgs e) { if (this.Owner is MainForm) { ((MainForm)this.Owner).UpdateValue(value); } } ``` 注意:要在窗体关闭事件中调用父窗体的接收值方法,需要将窗体的 FormClosed 事件处理程序与该事件相关联。在窗体的设计器中,可以双击 FormClosed 事件,自动生成事件处理程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值