我有一个主窗体form1, 通过showdialog的方式打开form2,然后在form2中再通过showdialog的方式分别打开form3,form4,form5三个窗体,并且在打开form3,或者form4,或者form5的同时隐藏它们的上一层窗体form2. 然后将form3(或form4,或form5)的参数传递到form1中,请问应该如何实现呢?
解决方案 »
- 求一条Sql语句
- (高手们来瞅瞅)关于DataGridView自定义的Column添加自定义属性保存问题!!
- C#调用dll,是否是COM?
- 为什么在C#下创建的窗口容器只有MDI指定?SDI在哪里指定?谢谢。
- 请问:原来vb6好像有个line控件可以画线条的,现在winform下,我该用什么控件画?
- 介绍一下system.type的功能
- 如何在c#中调用帮助文件?
- 怎么办
- 请教如何用c#编程实现access2000在局域网中的同步复制?
- 各位高手:保存的文本文件中的汉字成了乱码?
- 为什么只能改变textBox1的Text,textBox2的Text为什么了?
- 一个微信sdk接口调试花了我一天半。
这样其它窗体可以直接访问到;
规范处理:
使用事件绑定,数据发生变化后,触发事件,
完成数据传递
User user = new User();
user.ID = ..... .;
user.UserName =..... ;
FrmMain frm = new FrmMain(user);//这里是传对象,也可以传递参数
this.Hide();//隐藏
frm.Show();//显示窗体//需要显示的窗体
private User user = new User();
//构造函数
public FrmMain(User user)
{
InitializeComponent();
frm = this;
this.user = user;//传递用户对象
}传递参数
在窗体设置参数ID
public int ID;//获取参数的窗体FrmMain frm = new FrmMain();
frm.ID = ...... ;
frm.Show();
public class Form1
{
public string parameter { get; set; } private void btn_clicked()
{
Form2 f2 = new Form2();
f2.form1 = this;
f2.ShowDialog();
}
} public class Form2
{
public Form1 form1 { get; set; } private void btn_clicked()
{
Form3 f3 = new Form3();
f3.form1 = form1;
f3.ShowDialog();
}
} public class Form3
{
public Form1 form1 { get; set; } public void invokeForm1()
{
form1.parameter = "xxx";
}
}
public void button1_Click(object sender,EventArgs e)
{
form3 f3=new form3();
f3.Owner=this;
f2.Show();
}FORMBprivate void button1_Click(object sender,EventArgs e)
{
form1 f1=(form1)this.Owner;
((TextBox)f1.Controls["this.textBox1"]).Text="ReturnString";
this.Hide();
}试试这个。
1、写一个类库,存放你所有子窗口可能会更改的参数。并将类变量置于顶层窗口,类变量在顶层,相对于子窗体就是全局变量类型。子窗体中用构造函数来接收更改就行。
例如:
主窗体下:
Para para = new Para();
子窗体构造函数里面增加:
Para para;
public InitialSet(Para _para)
{
InitializeComponent();
para = _para;
}
之后便能对这些参数随意更改,例如para.X=2;这时候你顶层窗口的para.X也等于2了。第二种方法是委托的方式,也可说是回调函数的方式,在子窗体要回传参数时,调用回调函数就行第三种就是子窗体的参数写public,例如public int X{get;set;}.这样在子窗体showdialog结束,获取X的值就行这三种为了方便对参数进行管理,个人感觉写个类库舒服点