代码改变世界

让 VS2008 崩溃 的 WinForm 用户控件

2009-11-25 22:27  鹤冲天  阅读(7560)  评论(35编辑  收藏  举报

今天,使用VS2008做了一个WinFom的用户控件,编写代码时犯了一个“小小”的错误,确付出了惨重的代价。

下面就还原一下“案发现场”:

新建一个Window窗体应用程序项目:

ControlError0

向项目中添加一个用户控件:

ControlError1

打开UserControl1,向其添加一个TextBox:

ControlError2

转到代码,写一个属性Text,在19~23行

ControlError3
注意21行中,使用return Text,就是我犯的“小小”错误。它的本意如下:
ControlError4 
真正应该返回的textBox1的Text属性。因为这个属性太“简单”了,没放在心上,代码又有智能提示…

打开Form1,从工具箱中将这个用户控件置入窗体:

ControlError5

错误出现了:

ControlError6 

点击确定,VS2008就关闭了。

后记

为了解决这个问题,我花费了一个多小时的时间!大家不要取笑,我的实际情况要比上述复杂的多:用户控件的代码近千行,而且控件已经置入窗体,错误是编译生成时出现的,而且没有任何提示(VS2008直接关闭)。重复打开项目无数次,一编译就关掉,又来回反复的检查代码…

其实发生错误的原因很简单,就是一个StackOverflow。

虽然错误是我犯下的,但微软也有“责任”的,为什么不try/catch一下?为什么不提示详细一些?为什么就突然崩溃(让我也差点崩溃)?

 

“小小”错误,惨重的代价,发出来,提醒大家一下。