日期:2014-05-17  浏览次数:20703 次

继承就有运行代码了?
我新建一个项目,增加一个窗口,在窗口的Form1_Load事件中只写一行代码:
MessageBox.Show("OK");

生成。然后再增加一个“继承的窗体”,继承自该窗口,这时,界面就弹出一个“OK”的提示框!!!

我实在不理解,为什么继承一个窗口就会立即运行父窗口的代码?是否有其它方式避免这个问题的产生?

虽然代码写成:
if (this.DesignMode == true)
{
}
else
{
    MessageBox.Show("OK");
}
可以避免,但所有事件都要写上这一行,代价有点高。

------解决方案--------------------
在设计模式下要执行一些代码,这是为了尽量让设计界面上的控件表现得“所见即所得”。

假设控件在设计界面上根本不渲染,那么vs的设计窗体也就无意义了。所以几乎所有情况下,都会让你的用户在设计窗口里渲染。

但是假设你的控件在DesignMode模式下连MouseMove这些都灵敏地响应,那么vs的设计窗体显然就直接乱掉了,所以干脆,根本不让MouseMove事件执行。不过这毕竟是极少数。

大多数情况,你还是要自己写 if(!this.DesignMode) 判断来自己区分这种情况。例如很多程序是默认在 Form_Load 的时候就连上数据库的,但是设计时我们往往没有配置好相关数据库,因此此时你往往就必须在 Form_Load 中判断、如果是设计模式则直接退出,避免vs设计模式垮掉。