C# 主窗口调用子窗口的值传递?

求教:
C# 学习到多窗口程序时,一个主窗口可以包含多个子窗口。
我想问下如何在调用的时候传递值。
比如 我想让子窗口加载一张图 我只知道可以用公共变量的方法,让子窗口加载从主窗口得到的文件路径,进行加载。
可是这样我觉得不符合模块化设计的思想,我觉得应当可以像函数那样传递值给子窗口,可是要怎么做呢?请教。

还有,代码里面比如
if(执行打开消息框)
新建一个FORM窗口(子窗口) 打开图片。

我想问的是,这里新建一个子窗口的代码只有一条,但是在程序运行时,我会打开很多个子窗口,那么他们的名字不会重复吗?
比如在主窗口 中x.lable.text= .....是对一个子窗口的lable进行操作。
但是主窗口代码里只有新建 x 子窗口这一个代码。
在程序运行后,打开多个子窗口后,那么x代表哪一个子窗口呢?

高分求教~ 谢谢
下午的时候比较急 所以说的不清楚:
下面我重新解释一下。

1: 比如主窗口中创建一个子窗口类实例,是否可以像函数那样传递值过去,以便于子窗口实例在加载时执行某些事件。我知道公共变量可以如此,但是这样如果把主子当做模块分开来写就不方便。

2:想请问 当一个类被创建多个实例后,比如子窗口被多次创建实例,
如 if(openfiledialog.show.......==dia......) form x=new form();
这时候X到底是哪一个实例呢?他们不会重复吗?还有我在新建下一个实例时,已经有了X这个实例,为什么却任然还能创建。

dongjin 说的我看看,二楼的 我不太懂 ,我都不知道面向过程和面向对象的区别,一般解释就是去买酒,一个是说怎么走,怎么交易..... 一个就是说去买酒,怎么买不用管 ,可是这样的解释对于我们刚学的学生愣是不知道在设计上有什么区别,C语言是面向过程吧,可是人家也可以把过程写在函数里面,再把函数封装到头文件里,每次使用先声明头文件,然后调用函数,这个和C#声明命名空间,然后再调用方法没有什么区别啊,初学 ,还请不吝赐教,谢谢~

1、你可以传值到子窗体,但是你子窗体构造函数里面要定义一下,比如:
public Form2(string str)
{
this.Text = str;
}
那么你在主窗体中创建子窗体就可以这样:
Form2 form2 = new Form2("我是窗体2");
form2.Show();
值就传过去了。

2、只要不是静态类,那么类就可以有无数个实例,他们都是独立的,既然是独立的自然不会重复,因为你没有办法在同一个方法里面使用同一个名称来创建2个实例,比如下面的代码:
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2("我是窗体2");
form2.Show();

Form2 form2 = new Form2("我是窗体2");
form2.Show();

}
你这样做不可能通过编译,会告诉你:已在此范围定义了名为“form2”的局部变量。你只要不在同一个方法内定义就行了,方法内定义的都属于局部变量,离开了方法体他们也就不存在了。
如果你想创建多个窗体而且能记住他们并且在整个类里面都能调用,那你得在类里面定义它,而不是方法中,比如:
Form2[] form2 = new Form2[5];
使用数组定义5个窗体,然后你可以分别把form2的实例赋给他们,这样你下次要调用某个你创建的form2实例的时候直接用form2[x]就可以访问到它了,定义在了类中,所以它在整个类中都存在,不是局部的变量。

最后在讲一下,传值到子窗体采用构造函数或者属性都是允许的,我看你需要先了解构造函数和属性的定义,把这些弄清楚了应该能明白了,以后如果子窗体给主窗体传值那么就需要用到事件,现在对你来说不是学习事件的最好时间,慢慢来吧,先弄清楚基本概念。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-21
窗体间传值有几个办法,出了采用子窗体公开变量的办法外还有如下几个办法:
1.公开子窗体的控件~既将构造文件中控件声明是的修饰符改为public,效果和公开变量一样
2.采用Cookie,这个就简单了,吧值存到cookie中,可以在任一窗口取出来用,并进行修改
3.采用资源,或文本输出。这个就是将数据存到固定文件中,和cookie类似。
4.配置文件,同3.但有个特性就是可以用这个进行控件与数据绑定。
5.数据库,不管成不承认,这个用的最多~原理同2,3,4。只不过把数据存到数据库。一般用在使用数据库的时候
6.关于其他办法请参见下面的文章:
http://hi.baidu.com/yaobing0687/blog/item/b2c8433f617bc33771cf6c38.html
言归正传:
1.你的这种想法不是不能实现,只不过用C#会比较难,需要自己用代码构造窗体函数~不如c++来的容易一些,建议放弃
2.刚测试了下在不指定Name的情况下,x代表的是最后一次谭处端窗口,这种情况下,你有两种办法解决~
办法1.
int i=0;
在 form x=new form();
后面给x窗体一个动态的Name值:x.Name=“ChildFrom”+i.ToString();
i++;
这样就是每个窗体都有个Name值了。就可以通过Name来调用各个窗体了

办法2:
使用泛型:List<Form2> f2s=new List<Form2>();
form x=new form();
f2s.Add(x);
然后通过f2s来操作子窗体
第2个回答  2011-05-20
子窗体你在打开(类的构造)的时候,是可以构造多个的,这就好比你构造了多个类是一样的!至于X代表哪个窗体,你可以在构造的时候标识一下,通过一些额外的手段,比如新增一个成员变量,表示窗体的ID,或者通过窗体的名称(不能一样噢)
第3个回答  2011-05-21
其实所谓的窗体和类是一样的.
给他加个带参数的构造函数不久行了.
f1 是主窗体.f2是子窗体.
f1中
f2 f=new f2("图片路径")
f.show();
而f2的默认构造函数是没有参数的.请收到添加
第4个回答  2011-05-22
(1)传参数的时候,你可以重载子窗口的构造函数,给它加上参数,
比如public form(String str),调用的时候你就可以将父窗口的值传给它了。
(2)你说的应该是动态创建窗口,每个窗口都会有自己的ID,不会重复的。
(3)你动态创建的窗口,里面的控件没有添加事件,这样你就需要自己手动添加事件,例如
dongjin所写。

C# 主窗口调用子窗口的值传递?
1、你可以传值到子窗体,但是你子窗体构造函数里面要定义一下,比如:public Form2(string str){ this.Text = str;} 那么你在主窗体中创建子窗体就可以这样:Form2 form2 = new Form2("我是窗体2");form2.Show();值就传过去了。2、只要不是静态类,那么类就可以有无数个实例,他们都是独...

C#中如何在一个窗体中调用另一个窗体控件中的数据?
4、电击按钮以后执行定时任务,让变量增加值,然后将值赋值给label。5、在窗体里增加如下的红框部分,就是声明一个form变量方便后面的调用。6、最后如果你发现不成功的话,请记得将label的Modifiers属性设置成如下。

c#中如何实现弹出窗口并传递参数?
在C#中实现弹出窗口并传值涉及到窗体之间的传值,通常有以下的几种方式\\x0d\\x0a1:在一个窗体中添加另一个窗体的引用,通过该引用方法另一个窗体的控件值。\\x0d\\x0a比如在MainForm中引入singleFrm1 \\x0d\\x0aForm1 singleFrm1 = null;\\x0d\\x0apublic MainForm(Form1 singleFrm1)\\x0d...

c# 一个窗口如何得到另一个窗口的DataGridView的行数
form1 f1=new form1()相当于你新创建了一个对象,而不是取的当前form1对象 所以取的count=0 在from2的构造中将form1对象传入就可取到当前窗体的属性 如: form2构造 public form2(Form1 f1){ } form1中:new form2(this);这时form2中的f1就是当前form1对象,并且注意f1的DataGridView的访问修...

问: C#中窗体之间的对象传递问题求教 我在第一个窗体里面的buttonCli...
比如最简单的 ,两个窗口 FORM1 FORM2, 在1中的点击事件,把值传到2,同时打开2的窗口(showDialog)。传递一个简单的类型 class Student { public int id {set;get;} public string Name{set;get;} } 首先在form2的代码中写 public Form2(Student mystudent) \/\/这里加上参数 { InitializeCo...

c#如何把子窗体的值传给父窗体?
你可以在父窗体中重写个form方法:例:public Form1(string h){ InitializeComponent();this.h = h;label1.Text=h;} 然后在子类中这样写:例单击一按钮事件:private void button1_Click(object sender, EventArgs e){ Form1 a =new Form1("bb"); \/\/这里测试把bb传过去!a.Show();} 希望能帮...

在一个C#程序中有两个窗体,如何将第一个窗体里的变量值传递给第二...
添加一个带参数的构造方法,new窗体的时候就可以传值了 或者把变量变成静态的

有关C#数据在窗口之间传递的问题?
Form2_Load(object sender, EventArgs e){ this.label.Text = XXX;} } 首先在窗体2中定义一个公共的字符串变量,就可以在窗体1中直接给它赋值,达到了传递数据的目的。以上代码将其定义为了静态的,这样就可以在窗体1的按钮事件中直接对其赋值,要不就只能在获取窗体2的实例后才能对其进行赋值。

C#调用CMD窗口,传递参数
没明白什么意思 什么叫 自定义窗口显示字符跟结果任然在cmd窗口 不隐藏cmd窗口就把createnowindows改成fasle

c# winform窗口如何返回值?
方法1:通过保存对象的引用调用其方法实现对子窗体的控制。方法2:通过委托,在子窗体显示之前,为委托赋值,关注主窗体的数据变化,当有当有多个窗体需要接收信息,只需要为委托继续赋值(+=)即可,实现了数据传递的解耦性。方法3:子窗体弹出来之前,注册事件,关注主窗体消息的变化,当有多个窗体需要...

相似回答