我用VS2005的C#做一个小程序时出现了在控件在设计器中无法显示的问题

我做了2个窗体然后试图在其中一个小窗体中修改主窗体中几个控件的属性于是就把主窗体的一个listbox和一个label控件设置成了publicstaticSystem.Wi... 我做了2个窗体 然后试图在其中一个小窗体中修改主窗体中几个控件的属性 于是就把主窗体的一个listbox 和一个label控件设置成了
public static System.Windows.Forms.ListBox listBox2; 和
public static System.Windows.Forms.Label label1;
程序运行起来没问题 只是在设计器中这两个控件变得看不见了(如图)
而且出现这种情况后只要一用设计器改变窗体再编译就会出错 检查代码后发现这两个看不见的控件的相关代码奇怪的丢失了.... 多次试验后发现凡是设置成 public static 的控件都会出现这个问题
请问这是怎么回事,该如何解决?
如果不改变控件默认private属性如何在另一个窗体对控件进行控制?
展开
 我来答
xyhuju
2011-09-22 · TA获得超过127个赞
知道答主
回答量:124
采纳率:0%
帮助的人:152万
展开全部
你这真是怪异的用法。即然设计器不让你这么用,你就不要钻这牛角尖了。比较好的方法是用事件来处理,A是目标窗体,B是设置窗体。B中定义设置改变事件,A订阅事件。
追问
考虑过事件处理,但是不太熟悉 能再说的详细点吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
佐助boy
2011-09-22 · 超过67用户采纳过TA的回答
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:155万
展开全部
去了 static 就行了,
public System.Windows.Forms.ListBox listBox2; 这样不行吗
窗体实例.listBox2.items ...........

再不行,就定个属性了
更多追问追答
追问
我在类中想调用这个控件 如果初始化一个实例的话( Form1 f1 = new Form1();)就出错了
未处理的“System.StackOverflowException”类型的异常出现在 notebox001.exe 中。(确保您没有无限循环或无限递归)
想想也是 主窗体启动的时候调用类还会创建窗体......
是我实例化的方式不对吗? 还是有什么别的方法?
追答
1,主窗体可以通过参数传给子窗体
2,子窗体的Parent属性,应该是父窗体
你不会是主的出来就 实例化子的 子的有实例化主的 ????
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ctlyh
2011-09-22 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:173
采纳率:100%
帮助的人:76.2万
展开全部
因为你设置了public static全局的变量,所以这个控件不属于form,当然也就变得不见了
更多追问追答
追问
我刚才改回来了啊   已经去掉了 static
追答
可以看见吗?InitializeComponent()这个方法实例化,而且定义最好在 designer.cs里面,这样在回到设计器就可以看到
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式