我新建一个项目,增加一个窗口,在窗口的Form1_Load事件中只写一行代码:
MessageBox.Show("OK");生成。然后再增加一个“继承的窗体”,继承自该窗口,这时,界面就弹出一个“OK”的提示框!!!我实在不理解,为什么继承一个窗口就会立即运行父窗口的代码?是否有其它方式避免这个问题的产生?虽然代码写成:
if (this.DesignMode == true)
{
}
else
{
MessageBox.Show("OK");
}
可以避免,但所有事件都要写上这一行,代价有点高。
MessageBox.Show("OK");生成。然后再增加一个“继承的窗体”,继承自该窗口,这时,界面就弹出一个“OK”的提示框!!!我实在不理解,为什么继承一个窗口就会立即运行父窗口的代码?是否有其它方式避免这个问题的产生?虽然代码写成:
if (this.DesignMode == true)
{
}
else
{
MessageBox.Show("OK");
}
可以避免,但所有事件都要写上这一行,代价有点高。
1.继续者拥有父的public + protected
2.构造子类前,要先构造父(没有父也就没有子)子类可以通过override 或 new来定义自己的实现~不拼爹了~
{
MessageBox.Show("OK");
}
要知道,这是在设计状态下呀!!!而我父窗口的Load事件中的代码全是在运行状态下所要做的事情呀。
我们在父窗口的两个事件写代码: private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("Load");
} private void Form1_MouseMove(object sender, MouseEventArgs e)
{
MessageBox.Show("MouseMove");
}建立了继承Form1的窗口Form2时,为什么VS2008对父类的 Form1_Load 事件会执行,而对Form1_MouseMove却不执行,不管在你在设计环境下,Form2上鼠标怎么移,它就是不会 弹出任何提示。如果说子类窗口应该先执行父窗口的代码,为什么它不执行MouseMove,而只是“顺带着调用了 Load 事件”,是不是有它的必然?
由于这个必然,是不是还有某些事件也会在设计环境下被 VS2008 执行(比如 Form1_Resize……)?究竟有多少事件 像 Form1_Load ,多少事件 像 Form1_MouseMove?它们区分的原则是什么(又回到原始的问题,它是什么原因导致的必然)?这个讨论应该是很有意思的。讨论时,大家可以先假定我是有25年编码经验的老人家的基础上回答,谢谢!
Form1_AutoValidateChanged
Form1_BackColorChanged
Form1_BackgroundImageChanged
Form1_BindingContextChanged
Form1_CausesValidationChanged
Form1_ClientSizeChanged
Form1_ControlAdded
Form1_ControlRemoved
Form1_CursorChanged
Form1_DragEnter
Form1_DragLeave
Form1_DragOver
Form1_FontChanged
Form1_ForeColorChanged
Form1_InputLanguageChanged
Form1_Layout
Form1_Load
Form1_LocationChanged
Form1_MaximumSizeChanged
Form1_MinimumSizeChanged
Form1_MouseCaptureChanged
Form1_Move
Form1_PaddingChanged
Form1_Paint
Form1_ParentChanged
Form1_Resize
Form1_RightToLeftChanged
Form1_RightToLeftLayoutChanged
Form1_Shown
Form1_SizeChanged
Form1_StyleChanged
Form1_TextChanged
Form1_VisibleChanged
以下事件是我还没有测试出继承的效果(在设计环境下)
Form1_Activated
Form1_AutoSizeChanged
Form1_BackgroundImageChanged
Form1_ChangeUICues
Form1_Click
Form1_ContextMenuStripChanged
Form1_Deactivate
Form1_DockChanged
Form1_DoubleClick
Form1_DragDrop
Form1_EnabledChanged
Form1_Enter
Form1_FormClosed
Form1_FormClosing
Form1_GiveFeedback
Form1_HelpButtonClicked
Form1_HelpRequested
Form1_ImeModeChanged
Form1_InputLanguageChanging
Form1_KeyDown
Form1_KeyPress
Form1_KeyUp
Form1_Leave
Form1_MaximizedBoundsChanged
Form1_MdiChildActivate
Form1_MouseClick
Form1_MouseDoubleClick
Form1_MouseDown
Form1_MouseEnter
Form1_MouseHover
Form1_MouseLeave
Form1_MouseMove
Form1_MouseUp
Form1_PreviewKeyDown
Form1_QueryAccessibilityHelp
Form1_QueryContinueDrag
Form1_RegionChanged
Form1_ResizeBegin
Form1_ResizeEnd
Form1_Scroll
Form1_SystemColorsChanged
Form1_Validated
Form1_Validating
对于这些的区分,如果暂时找不到简单的原则,则还是要用你的建议:写代码时费点神考虑一下它在设计状态下要如何处理。