【问题解决】无法创建新的堆栈防护页面
【问题发现】
项目中需要几个自定义的控件,菜鸟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
【问题解决】无法创建新的堆栈防护页面相关推荐
- max无法创建新的堆栈防护页面_交互设计师,新媒体艺术家们请注意:2019MaxMSP必读书单来袭!...
不知不觉,2019年已经进入尾声.今年的读书计划完成的怎么样了呢?经常接到后台私信问我们关于MaxMSP的资源包,今天小编就为大家整理了一份MaxMSP的必读书单!请查收! 01 Step by St ...
- 如何在 SAP 电商云 Spartacus UI 中创建新的页面
Spartacus 中的页面基于使用相关 API 从 SAP Commerce 后端获取的 CMS 页面.来自 SAP Commerce 端的数据定义了元数据,如 url.标题等,以及页面的结构.结构 ...
- 如何给 SAP Spartacus Storefront 创建新的页面
page template 不包含 layout 或者 design information. content slot 在页面上的具体位置,以及 layout 和 design 的选择,必须在前端指 ...
- 电脑/笔记本重装系统“我们无法创建新的分区,也找不到现有的分区”问题解决
电脑/笔记本重装系统"我们无法创建新的分区,也找不到现有的分区"问题解决 换固态后U盘重装Win10系统,在安装选择分区下一步的时候总是遇到"我们无法创建新的分区,也找不 ...
- 无需编写任何代码即可使用 AI 创建新漫画,关于如何使用 GPT-3 和 DALL-E 为有趣页面生成原创内容的教程
上个月我探索了如何使用 OpenAI 的GPT-3文本生成器和他们的DALL-E图像到文本系统来创建新的连环画,而无需编写任何源代码.请注意,这两个系统都处于测试阶段,在我使用了所有免费代币后,他们开 ...
- ccs 移植创建新工程_CCS新工程创建与配置
1.一个完整的工程包含的文件 CCS建立一个完整的工程,至少需要以下4个文件: 1)存储器分配cmd文件:cmd命令文件是用来分配存储空间的. 2)C语言系统库rts2xx.lib:rts2xx.li ...
- python创建新进程_Python并发编程(进程的创建)
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的. 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的 ...
- vue cli 添加html,vue-cli创建的项目,配置多页面的实现方法
vue官方提供的命令行工具vue-cli,能够快速搭建单页应用.默认一个页面入口index.html,那么,如果我们需要多页面该如何配置,实际上也不复杂 假设要新建的页面是rule,以下以rule为例 ...
- 《Access 2007开发指南(修订版)》一一2.2 创建新数据库
本节书摘来自异步社区出版社<Access 2007开发指南(修订版)>一书中的第2章,第2.2节,作者: [美]Alison Balter,更多章节内容可以访问云栖社区"异步社区 ...
最新文章
- Linux之绝对路径和相对路径
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
- python包导入细节_python循环导入是一个实现细节吗?
- 跳一跳python源码下载_微信跳一跳python代码实现
- javascript --- Object.assign()浅复制解决方法
- 编程范式之字符和基本类型
- 刚刚,美国因「光纤断裂」大规模瘫痪,影响微软、Github和Netflix等服务
- 三句话教你买对房子!买到好房子的都祝福哥三年内赚两个亿!
- 阿里云CentOS 6.8 + WordPress + 芒果云KODExplorer
- 神经网络学习小记录61——Tensorflow2 搭建常见分类网络平台(VGG16、MobileNet、ResNet50)
- javalinux服务器上写文件,java 读取linux服务器上文件
- 大学物理复习笔记——电磁感应定律
- 信息学竞赛学不学计算机史,关于信息学奥赛不得不知道的事
- android banner图片错位,android轮播图Banner的使用及详解
- Computer Viruses and Malware (Advances in Information Security)
- 纽约州立计算机科学,SBU的CS「纽约州立大学石溪分校计算机科学专业」
- Centos Ubuntu 安装 gfortran
- 糖尿病预测模型-Pima印第安人数据集-论文_企业科研
- java scanner输入数组_Java Scanner输入两个数组的方法
- [HNOI2005]狡猾的商人
热门文章
- html 手机端无法拖动地图,关于腾讯地图api的禁止地图拖动问题
- linux idea 快捷键,Linux 下 IDEA 的 Ctrl+Alt+S
- java i o总结_Java I/O 总结
- Win32ASM代码基本模块
- 域名自动跳转不搭建服务器,宝塔搭建的服务器WEB系统环境如果做域名301跳转
- 图形学 射线相交算法_计算机图形学中的阴极射线管
- 十、非规则组织分析及其数学模型——锯齿形斜纹组织
- 雨滴桌面rainmeter素材_win10 桌面如何做到清爽好看?这篇教程给你答案
- hihoCoder挑战赛16 A—— 王胖浩与三角形
- uva 10061——How many zero\'s and how many digits ?