C# Winform继承窗体打开设计器卡死的一例解决方法

环境VS2017 15.5.4,Win10
开发过程中,发现一些窗体打开设计器会卡死白屏,另外有一些不会,(两者运行时正常),严重影响开发效率,经过一天多的对比研究,终于解决,
猜测可能是VS的BUG,多年前做VC程序时遇到BUG,向微软提交,微软开发人员也会推诿,这里分享一下解决办法,以免大家踩坑。
重现方法:

1、父窗体类Form1:Form,子窗体类Form2:Form1
2、打开子窗体设计器时,子窗体白屏,有时候用鼠标点击一下有时候能恢复,如果先打开子窗体代码,再打开设计器将会卡死。
解决方法:
在子窗体上拖一个Panel,设置为Fill(注意不能留一点空白,Form2不要设置Padding之类的,只要设置一点就会卡。),然后所有的新控件都摆在这个Panel上吧。
然后可以解决问题了。

原创内容,转载请保留出处
http://www.cnblogs.com/zhaogaojian/p/8440473.html

原文地址:https://www.cnblogs.com/zhaogaojian/p/8440473.html

时间: 2024-09-29 06:33:30

C# Winform继承窗体打开设计器卡死的一例解决方法的相关文章

winform窗体继承泛型类时,设计器无法使用解决办法

当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的. 目前我没有找到根本解决的办法,但可以间接解决无法调试的问题. 下面具体说明如何实现 比如我们有FormA,BaseForm<Entity>, FormA : BaseForm<XXX> 这样直接继承是无法使用设计器的. 需要增加一个临时的form类,比如TempForm. 由TempForm先继承BaseForm, 

C# WinForm 父窗体 子窗体 传值

C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值==================1.点击Form1的button1 打开Form2  父窗体给子窗体传值 可以调用重载子窗体的构造函数 直接传入相关数值 public partial class Form1 : Form    {        public Form1()        {   

Winform跨窗体操作控件(使用委托)

Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,Form1按钮打开Form2,然后在Form2的TextBox输入值在Form1的TextBox中显示出来. 一.项目结构 Form1窗体设计: Form2窗体设计: 二.代码实现 在Form2的代码中声明一个委托(写在Form2类外)-> public delegate void ChangeFor

winform 常用窗体属性

WinForm常用窗体属性: Form常用属性 AutoSizeMode属性 :值是: GrowAndShrink不能调整窗体大小 :值是:GrowOnly 可以改变大小 (1)Name属性:用来获取或设置窗体的名称. (2)WindowState属性:用来获取或设置窗体的窗口状态. (3)StartPosition属性:用来获取或设置运行时窗体的起始位置. (4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字. (5)Width属性:用来获取或设置窗体的宽度. (

主窗体和继承窗体

程序将第一个创建的窗体作为主窗体.如果创建了一个后,在其他窗体尚未创建的时候便释放调,此时又创建了一个窗体,那么第二次创建的窗体就会变成主窗体了. 关闭主窗体,程序就认为是终止运行,并且调用 Free 释放掉主窗体资源,进而程序结束退出.而关闭其他非主窗体,程序只是将其隐藏起来了. 子窗体会将主窗体的属性方法继承下来,对于主窗体中手动增加的方法(即声明在访问控制级别private.protected.published.public 中的方法),除非显示的增加 virtual 关键字,并在子类中

winform 的窗体美化的心酸

其实一直都很懒,很想做点什么.有时会为自己的一个目标狂热,但经常发觉激情过后更多的总是为自己找借口! 我想做一位狂热的程序猿粪子! 最近感觉奔三将近.逐有感而发,不能再这样下去了. 即拿出以前自己为那狂热好一阵的东西续断下去. 一直想为自己开发一套控件库,但感觉精力确实有限,也没那么多时间,逐当初就停止了这种热情. 这是套窗体皮肤,断断续续所花费的时间也不少. 下面我介绍下我的这套皮肤,其实也算不上一套,只算是个开始吧. 有人可能会想这不就是边框隐藏再绘制客户区么,这是目前大部人会选择的方案.但

WinForm开发,窗体显示和窗体传值相关知识总结

以前对WinForm窗体显示和窗体间传值了解不是很清楚最近做了一些WinForm开发,把用到的相关知识整理如下 A.WinForm中窗体显示显示窗体可以有以下2种方法:Form.ShowDialog方法 (窗体显示为模式窗体)Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如下:1.在调用Form.Show方法后,Show方法后面的代码会立即执行2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码3.当窗体显示为模式窗体时,单击"关闭"

WinForm自定义窗体

public partial class Form3 : Form { const int WM_NCHITTEST = 0x0084; const int HT_LEFT = 10; const int HT_RIGHT = 11; const int HT_TOP = 12; const int HT_TOPLEFT = 13; const int HT_TOPRIGHT = 14; const int HT_BOTTOM = 15; const int HT_BOTTOMLEFT = 16

手动修改继承窗体

转自http://blog.csdn.net/atian2009/article/details/7478234 1.手工修改窗体继承时,怎样让其父类的所有控件显示(在设计时)? File -> New -> Form,新建一个form,在form的单元文件中修改 TForm1 = class(TForm) 为: TForm1 = class(TFatherForm) //TFatherForm为被继承的窗体 不要忘记  uses TFatherForm的单元文件, 再在Form窗体上弹出右键