关于C#窗口的传值总结.docx
- 文档编号:6639926
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:7
- 大小:16.88KB
关于C#窗口的传值总结.docx
《关于C#窗口的传值总结.docx》由会员分享,可在线阅读,更多相关《关于C#窗口的传值总结.docx(7页珍藏版)》请在冰豆网上搜索。
关于C#窗口的传值总结
C#窗体间传值的总结
假设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为:
FMChildfmChild=newFMChild();
fmChild.ShowDialog();
fmChild.Dispose();
如果我们需要将主窗体FMMain中的stringstrValueA的值传给FMChild,那么我们首先对strValueA进行如下处理:
privatestringstrValueA;
publicstringStrValueA
{
get
{
returnstrValueA;
}
set
{
strValueA=value;
}
}
使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。
方法一:
FMChildfmChild=newFMChild();
fmChild.ShowDialog(this);
fmChild.Dispose();
方法二:
FMChildfmChild=newFMChild();
FMChild.Owner=this;
fmChild.ShowDialog();
fmChild.Dispose();
然后在修改子窗体FMChild中申明一个主窗体FMMain对象,
FMMainfmMain;
在需要使用主窗体FMMain的stringstrValueA的地方加上如下代码:
fmMain=(FMMain)this.Owner;
这样,就可以获得主窗体FMMain中strValueA的值了。
这时,如果你需要将子窗体FMChild中的stringstrValueB传给主窗体FMMain,同样处理stringstrValueB。
privatestringstrValueB;
publicstringStrValueB
{
get{returnstrValueB;}
set{strValueB=value;}
}
那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如:
stringstrTmp=fmChild.StrValueB;
注意,在VisualC#智能设备PocketPC2003设备应用程序中显示子窗体FMChild只能使用:
FMChildfmChild=newFMChild();FMChild.Owner=this;fmChild.ShowDialog();fmChild.Dispose();
在VisualC#智能设备PocketPC2003的设备应用程序中ShowDialog()没有重载。
C#窗体间传值的几种方法
调用窗体(父):
Form1,被调用窗体(子):
Form2
方法1:
所有权法
//Form1:
//需要有一个公共的刷新方法
publicvoidRefresh_Method()
{
//...
}
//在调用Form2时,要把Form2的所有者设为Form1
Form2f2=newForm2();
f2.Owner=this;
f2.ShowDialog();
//Form2:
//在需要对其调用者(父)刷新时
Form1f1;
f1=(Form1)this.Owner;
f1.Refresh_Method();
方法2:
自身传递法
//Form1:
//需要有一个公共的刷新方法
publicvoidRefresh_Method()
{
//...
}
Form2f2=newForm2();
f2.ShowDialog(this);
//Form2:
privateForm1p_f1;
publicForm2(Form1f1)
{
InitializeComponent();
p_f1=f1;
}
//刷新时
p_f1.Refresh_Method();
方法3:
属性法
//Form1:
//需要有一个公共的刷新方法
publicvoidRefresh_Method()
{
//...
}
//调用时
Form2f2=newForm2();
f2.P_F1=this;
f2.Show();
//Form2:
privateForm1p_f1;
publicForm1P_F1
{
get{returnp_f1;}
set{p_f1=value;}
}
//刷新时
p_f1.Refresh_Method();
方法4:
委托法
//声明一个委托
publicdelegatevoidDisplayUpdate();
//Form1:
//需要有一个公共的刷新方法
publicvoidRefresh_Method()
{
//...
}
//调用时
Form2f2=newForm2();
f2.ShowUpdate+=newDisplayUpdate(Refresh_Method);
f2.Show();
//Form2:
//声明事件
publiceventDisplayUpdateShowUpdate;
//刷新时,放在需要执行刷新的事件里
ShowUpdate();
Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行:
Form2f2=newForm2();
f2.ShowDialog(this);
Form2中放一个TextBox1,一个Button1,当点击Button1时执行:
Form1f1=(Form1)this.Owner;
f1.Label1.Text=this.TextBox1.Text;
注意:
Form1中的label1要设为public
用C#实现两个WinForm间的传值
实现的思路:
从Form1传递到Form2:
2个窗体即两个类,两个窗体间的数据传送,可以采用构造函数来实现。
从Form2返回到Form1,并传递数据:
实例化Form2后,打f2用ShowDialog()方法,然后等待f2关闭时再回传数据到Form1。
实现步骤及代码:
1:
新建两个窗口:
Form1,Form2;
2:
打开Form2,添加一个textBox:
textBox1;添加一个Button:
button1;然后添加一个构造函数:
//定义一个变量,用来传值。
publicstringreturnValue;
publicForm2(stringtxtValue)
{
InitializeComponent();
this.textBox1.Text=txtValue;
}
然后在button1的单击事件中添加如下代码:
privatevoidbutton1_Click(objectsender,EventArgse)
{
returnValue=this.textBox1.Text;
this.Close();
}
3:
Form1中添加一个textBox:
textBox1;添加一个Button:
button1;然后在button1的单击事件中添加如下代码:
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringtxtValue=this.textBox1.Text;
Form2f2=newForm2(txtValue);
f2.ShowDialog();
this.textBox1.Text=f2.returnValue;
}
Form1中(父窗口:
)
publicclassForm1:
System.Windows.Forms.Form
{
privateSystem.Windows.Forms.ButtonbtnOpen;
publicSystem.Windows.Forms.TextBoxtxtContent;//注意是public
........
........
[STAThread]
staticvoidMain()
{
Application.Run(newForm1());
}
privatevoidbtnOpen_Click(objectsender,System.EventArgse)
{
Form2frm=newForm2(this);
frm.ShowDialog();
}
}
Form2中(子窗口)
publicclassForm2:
System.Windows.Forms.Form
{
privateSystem.Windows.Forms.Buttonbutton1;
privateSystem.Windows.Forms.TextBoxtxtValue;
privateForm_parentForm=null;
publicForm2()
{
InitializeComponent();
}
publicForm2(FormparentForm)
{
InitializeComponent();
this._parentForm=parentForm;
}
........
........
//更新父窗口中文本框中的值!
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
((Form1)_parentForm).txtContent.Text=this.txtValue.Text;
}
}
一个小例子:
将一个窗体下TextBox中的文本内容赋值给另一个窗体下的ListView中所对应的列。
方法如下:
将TextBox(命名为djzclx1)所在窗体Query_Djzclx.cs设置一个属性
privatestringVarvalue;
publicstringvarvalue
{
get
{
returnVarvalue;//返回值
}
}
添加button1,其DialogResult属性设置为OK;
然后在button1的单价事件里把TextBOx的值赋给Varvalue(Varvalue=djzclx1;),这样该窗体的属性varvalue就有TExtBox的值了。
在ListView所在窗体添加button1,其单击事件添加如下代码:
privatevoidCkDjzclx_Click(objectsender,EventArgse)
{
Query_DjzclxnewFrmDjzclx=newQuery_Djzclx();//实例化对话框窗体
if(newFrmDjzclx.ShowDialog()==DialogResult.OK)//如果对话框窗体点击的DialogoResult属性是“OK”的按钮
{
ListView.Text=newFrmDjzclx.varvalue;//这句的意思是这样,就是把属性varvalue的值回传给ListView。
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 C# 窗口 总结