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

求教: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#声明命名空间,然后再调用方法没有什么区别啊,初学 ,还请不吝赐教,谢谢~
展开
 我来答
qihua555
推荐于2017-10-15 · 超过26用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:67.1万
展开全部
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]就可以访问到它了,定义在了类中,所以它在整个类中都存在,不是局部的变量。

最后在讲一下,传值到子窗体采用构造函数或者属性都是允许的,我看你需要先了解构造函数和属性的定义,把这些弄清楚了应该能明白了,以后如果子窗体给主窗体传值那么就需要用到事件,现在对你来说不是学习事件的最好时间,慢慢来吧,先弄清楚基本概念。
yaobing0687
2011-05-21 · TA获得超过988个赞
知道小有建树答主
回答量:1309
采纳率:0%
帮助的人:906万
展开全部
窗体间传值有几个办法,出了采用子窗体公开变量的办法外还有如下几个办法:
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来操作子窗体
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
egghead008
2011-05-20 · TA获得超过1164个赞
知道小有建树答主
回答量:1424
采纳率:100%
帮助的人:1395万
展开全部
子窗体你在打开(类的构造)的时候,是可以构造多个的,这就好比你构造了多个类是一样的!至于X代表哪个窗体,你可以在构造的时候标识一下,通过一些额外的手段,比如新增一个成员变量,表示窗体的ID,或者通过窗体的名称(不能一样噢)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星星浪漫色
2011-05-21 · TA获得超过759个赞
知道小有建树答主
回答量:334
采纳率:0%
帮助的人:197万
展开全部
其实所谓的窗体和类是一样的.
给他加个带参数的构造函数不久行了.
f1 是主窗体.f2是子窗体.
f1中
f2 f=new f2("图片路径")
f.show();
而f2的默认构造函数是没有参数的.请收到添加
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
快乐分享者
2011-05-22 · TA获得超过5116个赞
知道大有可为答主
回答量:1172
采纳率:0%
帮助的人:578万
展开全部
(1)传参数的时候,你可以重载子窗口的构造函数,给它加上参数,
比如public form(String str),调用的时候你就可以将父窗口的值传给它了。
(2)你说的应该是动态创建窗口,每个窗口都会有自己的ID,不会重复的。
(3)你动态创建的窗口,里面的控件没有添加事件,这样你就需要自己手动添加事件,例如
dongjin所写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式