【问题发现】

项目中需要几个自定义的控件,菜鸟D定义了一个接口,打算使用多态来统一调用。在完成两个自定义控件后,项目都能正常运行。但是在第三个控件使用的时候就出了问题:将控件拖到界面上以后,不能拖动改变控件的宽度,一拖动就会出现“无法创建新的堆栈防护页面”的提示,然后vs直接崩溃。后来经过多次尝试,发现可以输入改变控件的宽度,但是依然会有崩溃发生。

【问题解决】

菜鸟D在网上搜索相关的解决办法,但是几乎所有的回答都在说是递归调用导致溢出。菜鸟D发现自己的程序中有递归的调用,但是前两个控件也是调用的这一个递归方法,如果是方法本身的问题,那两种控件也一定会出错,但事实是那两种控件可以正常使用的。所以问题一定就在新的自定义控件上。

由于崩溃是在改变控件的宽度后发生的,必须看看宽度的属性,以下是部分代码:

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

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

Recursive call 不就是递归么!!!原来如此,是这里的递归导致了崩溃。删掉这段代码后,控件随意拖拉也再没出现那样的错误了。问题到此已经得到了解决。

【问题的分析】

菜鸟D不明白为什么这么写会造成递归,于是开始接下来的查找。

在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.递归的调用一定要谨慎,否则可能造成溢出,导致崩溃。

菜鸟D希望这篇文章对您有所帮助。

转载于:https://www.cnblogs.com/cnDqf/p/4083383.html

【问题解决】无法创建新的堆栈防护页面相关推荐

  1. max无法创建新的堆栈防护页面_交互设计师,新媒体艺术家们请注意:2019MaxMSP必读书单来袭!...

    不知不觉,2019年已经进入尾声.今年的读书计划完成的怎么样了呢?经常接到后台私信问我们关于MaxMSP的资源包,今天小编就为大家整理了一份MaxMSP的必读书单!请查收! 01 Step by St ...

  2. 如何在 SAP 电商云 Spartacus UI 中创建新的页面

    Spartacus 中的页面基于使用相关 API 从 SAP Commerce 后端获取的 CMS 页面.来自 SAP Commerce 端的数据定义了元数据,如 url.标题等,以及页面的结构.结构 ...

  3. 如何给 SAP Spartacus Storefront 创建新的页面

    page template 不包含 layout 或者 design information. content slot 在页面上的具体位置,以及 layout 和 design 的选择,必须在前端指 ...

  4. 电脑/笔记本重装系统“我们无法创建新的分区,也找不到现有的分区”问题解决

    电脑/笔记本重装系统"我们无法创建新的分区,也找不到现有的分区"问题解决 换固态后U盘重装Win10系统,在安装选择分区下一步的时候总是遇到"我们无法创建新的分区,也找不 ...

  5. 无需编写任何代码即可使用 AI 创建新漫画,关于如何使用 GPT-3 和 DALL-E 为有趣页面生成原创内容的教程

    上个月我探索了如何使用 OpenAI 的GPT-3文本生成器和他们的DALL-E图像到文本系统来创建新的连环画,而无需编写任何源代码.请注意,这两个系统都处于测试阶段,在我使用了所有免费代币后,他们开 ...

  6. ccs 移植创建新工程_CCS新工程创建与配置

    1.一个完整的工程包含的文件 CCS建立一个完整的工程,至少需要以下4个文件: 1)存储器分配cmd文件:cmd命令文件是用来分配存储空间的. 2)C语言系统库rts2xx.lib:rts2xx.li ...

  7. python创建新进程_Python并发编程(进程的创建)

    动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的. 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的 ...

  8. vue cli 添加html,vue-cli创建的项目,配置多页面的实现方法

    vue官方提供的命令行工具vue-cli,能够快速搭建单页应用.默认一个页面入口index.html,那么,如果我们需要多页面该如何配置,实际上也不复杂 假设要新建的页面是rule,以下以rule为例 ...

  9. 《Access 2007开发指南(修订版)》一一2.2 创建新数据库

    本节书摘来自异步社区出版社<Access 2007开发指南(修订版)>一书中的第2章,第2.2节,作者: [美]Alison Balter,更多章节内容可以访问云栖社区"异步社区 ...

最新文章

  1. Linux之绝对路径和相对路径
  2. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
  3. python包导入细节_python循环导入是一个实现细节吗?
  4. 跳一跳python源码下载_微信跳一跳python代码实现
  5. javascript --- Object.assign()浅复制解决方法
  6. 编程范式之字符和基本类型
  7. 刚刚,美国因「光纤断裂」大规模瘫痪,影响微软、Github和Netflix等服务
  8. 三句话教你买对房子!买到好房子的都祝福哥三年内赚两个亿!
  9. 阿里云CentOS 6.8 + WordPress + 芒果云KODExplorer
  10. 神经网络学习小记录61——Tensorflow2 搭建常见分类网络平台(VGG16、MobileNet、ResNet50)
  11. javalinux服务器上写文件,java 读取linux服务器上文件
  12. 大学物理复习笔记——电磁感应定律
  13. 信息学竞赛学不学计算机史,关于信息学奥赛不得不知道的事
  14. android banner图片错位,android轮播图Banner的使用及详解
  15. Computer Viruses and Malware (Advances in Information Security)
  16. 纽约州立计算机科学,SBU的CS「纽约州立大学石溪分校计算机科学专业」
  17. Centos Ubuntu 安装 gfortran
  18. 糖尿病预测模型-Pima印第安人数据集-论文_企业科研
  19. java scanner输入数组_Java Scanner输入两个数组的方法
  20. [HNOI2005]狡猾的商人

热门文章

  1. html 手机端无法拖动地图,关于腾讯地图api的禁止地图拖动问题
  2. linux idea 快捷键,Linux 下 IDEA 的 Ctrl+Alt+S
  3. java i o总结_Java I/O 总结
  4. Win32ASM代码基本模块
  5. 域名自动跳转不搭建服务器,宝塔搭建的服务器WEB系统环境如果做域名301跳转
  6. 图形学 射线相交算法_计算机图形学中的阴极射线管
  7. 十、非规则组织分析及其数学模型——锯齿形斜纹组织
  8. 雨滴桌面rainmeter素材_win10 桌面如何做到清爽好看?这篇教程给你答案
  9. hihoCoder挑战赛16 A—— 王胖浩与三角形
  10. uva 10061——How many zero\'s and how many digits ?