开发中途 WinForms 控件突然消失

用 Visual Studio 进行 winform 开发的时候,中途不知道干了啥,突然控件全不见了,如图所示:

仅剩下一个窗口在这里插入图片描述

找问题找半天没找出来很是郁闷,最后还好有备份的版本,对比了一下新的和旧的代码,找出问题并恢复了。

为防止以后也遇到这种情况,记录一下。

检查控件是否被删除

打开Form.Designer.cs 的代码,拉到最下面,看是否有添加控件的声明,类似于下面这样。
在这里插入图片描述
如果有,再回头查看初始部件方法: InitializeComponent() 中,检查是否 new 了这些控件。
如果都有,控件方面应该没啥问题,至少不是因为控件被删除了。
在这里插入图片描述

控件可视性

任选一个控件,检查控件可见性属性是否为 True 如果是True,可见性方面也没啥问题。
一般如果是所有控件消失,大概率不会是这种可见性的问题。
在这里插入图片描述

添加任意控件测试

这里添加了一个按钮控件,发现可以正常显示,运行也并无问题,说明不是 IDE 的问题。
既不是 VS 的问题,也不是控件方面的问题,推测可能是 Form 中的问题。
在这里插入图片描述

是否缺失 add 方法

推测是 Form 的问题,继续回到Form.Designer.cs源文件中,还是找到初始化 InitializeComponent()方法,不过这次不是找控件相关的初始化操作代码,而是找到你的窗口 Form1 相关的代码。

  1. 每次添加新的控件,都会在 InitializeComponent() 中生成相应的初始化代码,添加的控件名字注释作为开头,依次生成,所以你可以用ctrl+F 搜索控件名(窗口名)即可。
  2. 当然 InitializeComponent() 中的代码有控件初始化,也有窗口初始化的代码,而一般窗口初始化会在最后一段的代码块中,所以滑动到 InitializeComponent() 方法的末尾即可找到窗口(Form)相关的初始化代码片段。

如下图所示,本窗口名Form1。检查是否缺失了 this.Controls.Add() 相关的方法,这个方法作用是添加控件到指定控件集合。换言之,一般情况下,在窗口中添加了几个控件,这里就会有几个 add 方法,把缺少的补全即可。
如果你使用了tabcontrol控件,请继续看。

在这里插入图片描述

是否使用类似 tabcontrol 的容器控件

如果你使用了类似于tabcontrol 的容器控件,那么上面的this.Controls.Add() 只需一个或两个,并且这两个的参数是panel,tablcontrol之类的容器控件即可。找到你的tabcontrol控件名作为参数传递到add方法中,你的页面就会重新出现。我这里的控件名是 tabControl1 ,添加这行代码后,界面恢复正常。
而你的其他控件(label,button之类的)则被拖动添加到容器的 page 中了,你可以找到 tabControl相关代码,自行学习与了解。
总结下来:
你的控件布局在Form窗口中,布局的层次类似于这样:

//  Form下
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
//...........

你的控件布局在容器中,容器布局在From中,布局的层次类似于这种

// Form 下
this.Controls.Add(this.tabControl1);

// tabControl1下
this.tabControl1.Controls.Add(this.controlPage1);

//controlPage1下
this.controlPage1.Controls.Add(this.label2);
this.controlPage1.Controls.Add(this.button7);
this.controlPage1.Controls.Add(this.label4);
//.............

总结

到这里,我的问题基本解决了,至于那段方法为何突然消失,我也记不清,似乎是因为我添加了一个布局的控件,然后又误删了某行代码,编译运行的时候报错,
我按照建议提示进行修复,之后就成了开头的模样。

此外,VS本身编译生成的时候可能会将自动生成的源码做一定的格式化,也就是这些生成的源码有它的规范(首行注释,余下的都是代码不夹杂注释行)。
经测试,假如我注释该行(如下图),就会将 tabcontrol 消失,出现开头的空白Form窗口,如果我拖动添加新的控件,就会添加到窗口Form中,VS会生成相应的源码,因代码格式化也删除该注释行的代码,生成新的相应的添加控件的代码,注释行将被删除,生成了this.Control.Add(label2)
在这里插入图片描述
,,,,可能我表述不清,大家可以试试。

最后,如果还有遇到了其他原因,欢迎补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值