您的位置首页百科知识

无法创建新的堆栈防护页面,怎么办

无法创建新的堆栈防护页面,怎么办

的有关信息介绍如下:

无法创建新的堆栈防护页面,怎么办

无法创建新的堆栈防护页面的解决办法

1、在工具--》选项中关掉IntelliTrace

必须看看宽度的属性,以下是部分代码:

public int Width { get { return this.Width; } set { Width = value; //此处自定义控件内部的控件的location的设置,如:lable1.location=new Piont(); //为了实现一个联动的效果 } }

这时菜鸟D注意到代码左侧的提示

2、仔仔细细检查程序内代码问题,只要程序内有死循环就会出现这个问题。

在get里面的Width上用F12,发现光标只是向上跳了一行,这个好像不对,感觉有点怪。随即想到既然这是自定义控件,继承Control控件类,控件类里面会不会做了相应的封装。于是,转到定义,以下代码展示继承关系:

public partial class ExControlBox : UserControl, IControlCommonablepublic class UserControl : ContainerControlpublic class ContainerControl : ScrollableControl, IContainerControlpublic class ScrollableControl : Control, IComponent, IDisposablepublic class Control : Component, IDropTarget, ISynchronizeInvoke, IWin32Window, IBindableComponent, IComponent, IDisposable// Control基类中的两个属性public int Width { get; set; }public virtual string Text { get; set; }

果然在Control基类里找到Width属性,当看到Text属性时想起曾经使用过override重写过Text属性,那是否可以换一种写法“重写”Width属性?当然可以——new。New 作为运算符用于创建对象和调用构造函数,作为修饰符用于隐藏基类中被继承的成员(出自msdn)。

于是改造了原来的Width属性的写法,也能成功运行没有发生崩溃。代码如下:

new public int Width { get { return base.Width; } set { base.Width = value; //此处自定义控件内部的控件的location的设置,如:lable1.location=new Piont(); //为了实现一个联动的效果 } }

1.在定义属性时,应注意是否该属性已经存在于基类,如果存在,就需要判断是需要重写该属性,还是隐藏该属性。

2.递归的调用一定要谨慎,否则可能造成溢出,导致崩溃。