C窗体间传值的几种方法
更新时间:2023-07-19 11:43:02 阅读量: 实用文档 文档下载
假设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为: FMChild fmChild = new FMChild();
fmChild.ShowDialog();
fmChild.Dispose();
如果我们需要将主窗体FMMain中的string strValueA的值传给FMChild,那么我们首先对strValueA进行如下处理:
private string strValueA;
public string StrValueA
{
get
{
return strValueA;
}
set
{
strValueA = value;
}
}
使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。 方法一:
FMChild fmChild = new FMChild();
fmChild.ShowDialog(this);
fmChild.Dispose();
方法二:
FMChild fmChild = new FMChild();
FMChild.Owner = this;
fmChild.ShowDialog();
fmChild.Dispose();
然后在修改子窗体FMChild中申明一个主窗体FMMain对象,
FMMain fmMain;
在需要使用主窗体FMMain的string strValueA的地方加上如下代码:
fmMain = (FMMain)this.Owner;
这样,就可以获得主窗体FMMain中strValueA的值了。
这时,如果你需要将子窗体FMChild中的string strValueB传给主窗体FMMain,同样处理string strValueB。
private string strValueB;
public string StrValueB
{
get { return strValueB; }
set { strValueB = value; }
}
那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如:
string strTmp = fmChild.StrValueB;
注意,在Visual C#智能设备Pocket PC 2003设备应用程序中显示子窗体FMChild只能使用:
FMChild fmChild = new FMChild();FMChild.Owner =
this;fmChild.ShowDialog();fmChild.Dispose();
在Visual C#智能设备Pocket PC 2003的设备应用程序中ShowDialog()没有重载。
C#窗体间传值的几种方法
调用窗体(父):Form1,被调用窗体(子):Form2
方法1: 所有权法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//在调用Form2时,要把Form2的所有者设为Form1
Form2 f2 = new Form2() ;
f2.Owner = this;
f2.ShowDialog() ;
//Form2:
//在需要对其调用者(父)刷新时
Form1 f1 ;
f1 = (Form1)this.Owner;
f1.Refresh_Method() ;
方法2:自身传递法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
Form2 f2 = new Form2() ;
f2.ShowDialog(this) ;
//Form2:
private Form1 p_f1;
public Form2(Form1 f1)
InitializeComponent();
p_f1 = f1;
}
//刷新时
p_f1.Refresh_Method() ;
方法3:属性法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.P_F1 = this;
f2.Show() ;
//Form2:
private Form1 p_f1;
public Form1 P_F1
{
get{return p_f1;}
set{p_f1 = value;}
}
//刷新时
p_f1.Refresh_Method() ;
方法4:委托法
//声明一个委托
public delegate void DisplayUpdate();
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
f2.Show() ;
//Form2:
//声明事件
public event DisplayUpdate ShowUpdate;
//刷新时,放在需要执行刷新的事件里
ShowUpdate();
Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行: Form2 f2 = new Form2();
f2.ShowDialog(this);
Form2中放一个TextBox1,一个Button1,当点击Button1时执行:
Form1 f1 = (Form1)this.Owner;
bel1.Text = this.TextBox1.Text;
注意:Form1中的label1要设为public
用C#实现两个WinForm间的传值
这个题目我曾经出给来公司面试的人,也曾经出给刚毕业的大学生,几乎是没有人会做啊。难道这个问题真的这么难么?现在我给出实现的主要源代码(开发平台为VC#2005)。
实现的思路:
从Form1传递到Form2: 2个窗体即两个类,两个窗体间的数据传送,可以采用构造函数来实现。
/question/141773720.html?ansup1
从Form2返回到Form1,并传递数据:实例化Form2后,打f2用ShowDialog()方法,然后等待f2关闭时再回传数据到Form1。
实现步骤及代码:
1:新建两个窗口: Form1,Form2;
2:打开Form2,添加一个textBox:textBox1;添加一个Button:button1;然后添加一个构造函数:
//定义一个变量,用来传值。
public string returnValue ;
public Form2(string txtValue)
{
InitializeComponent();
this.textBox1.Text = txtValue;
}
然后在button1的单击事件中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
returnValue = this.textBox1.Text;
this.Close();
}
3:Form1中添加一个textBox:textBox1;添加一个Button:button1;然后在button1的单击事件中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
string txtValue = this.textBox1.Text;
Form2 f2 = new Form2(txtValue);
f2.ShowDialog();
this.textBox1.Text = f2.returnValue;
}
Form1 中 (父窗口:)
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnOpen;
public System.Windows.Forms.TextBox txtContent; //注意是public ........
........
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void btnOpen_Click(object sender, System.EventArgs e) {
Form2 frm=new Form2(this);
frm.ShowDialog();
}
}
Form2中(子窗口)
public class Form2 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox txtValue;
private Form _parentForm=null;
public Form2()
{
InitializeComponent();
}
public Form2(Form parentForm)
{
InitializeComponent();
this._parentForm =parentForm;
}
........
........
//更新父窗口中文本框中的值!
private void button1_Click(object sender, System.EventArgs e) {
((Form1)_parentForm).txtContent.Text =this.txtValue .Text ; }
正在阅读:
C窗体间传值的几种方法07-19
数据的读取06-12
物流管理认知实习报告 - 图文09-15
答案--东师幼儿心理学15秋在线作业1满分答案(2)04-10
六年级语文(上册)选择题集锦05-25
2019有关元宵节猜灯谜作文06-13
高中数学圆锥曲线方程试卷2(考点详解版)07-12
(目录)2017-2022年浙江省核电行业发展预测及投资咨询报告01-05
西方酒文化02-17
高级编程技术--tc图形界面03-20
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 窗体
- 方法