首页 - 技术 - vs2010 继承窗口_vs2010 继承窗体的问题解决办法

vs2010 继承窗口_vs2010 继承窗体的问题解决办法

2023-09-24 15:19

WinForm窗体继承是必须的,但是vs的窗体继承不如Delphi那样随心所欲。

1、从父类继承一个窗体后,发现打开子类窗体的设计界面时出错了,错误提示各种各样,原因只有一个:

由于vs的继承是必须先生成组件后,再从组件中继承的,所以当父类窗口有load或shown这类的事件时,继承它的子窗体就会先执行这一类的事件。假如父窗口的load事件中有一些类似连接数据库的操作,则往往会出错而无法设计。

简单的解决方法是在父窗口的load或shown事件中加入:

if (!DesignMode) { 你的代码段..... }

参考资料:http://www.gsm-guard.net/batoosai/archive/2006/04/05/367484.html

?

?2、屏蔽父窗体的事件

??? 继承窗体一定有一些例外事件,比如父窗体的FormClosed事件写了日志,而子窗体不希望写日志而是其它操作,这就需要屏蔽父类事件。

??? 首先把父类的事件改名,如按钮事件改如下(baseform是父类名称,仅用于易区分,可以是任何字符)并改成protected权限

??? protected void button1_Click_baseform(object sender, EventArgs e)

??? 设计器baseform.Designer.cs里面也要对应改一下才能通过编译

??? www.gsm-guard.net += new System.EventHandler(this.button1_Click_baseform);

??? 子类可以正常使用按钮事件,仅在需要屏蔽父类按钮事件时,在子类的构造函数中把对应事件的父类委托去除即可,如下

??? public Form1()????{??????????? InitializeComponent();????????????www.gsm-guard.net -= new EventHandler(base.button1_Click_baseform); //增加这行

??? }

???如果你有多层窗体继承,可以如法炮制,只要把各层父类的按钮事件改名即可。

?? 因为会执行父类按钮事件是父类有事件委托,去除委托就可以了,这比网上说的虚函数重载方法要方便得多。?

?

VS2010项目需要添加包含目录和库目录,在“项目” -> “属性” -> “配置属性” -> “VC++目录” -> "常规"内添加,点击“编辑”,即可添加需要的第三方库问价。

在“包含文件”中添加即可,其中“继承的值”里面可能有我们不需要的库目录,这时候需要在C盘中找到文件删除。

路径为“C:\Users\Administrator\AppData\Local\Microsoft\MSBuild\v4.0” 使用 Notepad++ 编辑相应文件,删除不需要的路径即可

$(ExecutablePath)

$(IncludePath)

$(ReferencePath)

$(LibraryPath)

$(SourcePath)

$(ExcludePath)

分别在增添加包含目录,在项中添加库目录,保存重启VS即可。

VC Directory设置的位置和以前的版本不一样。VS2010之前,VC Directory的设置都是在IDE的Tools->Options中设置的;VS2010改为,分别在每个项目中的Properties中设置。难道要每个项目都设置一遍常用的Include吗?答案是,不用。在IDE中,打开View->Other Windows->Property Manager。展开树形后,你会发现一个名为“Microsoft.Cpp.Win32.user”的项目右击并点击“Properties”后,你会看到一个和VC Project properties类似的属性设置框。现在,你应该知道答案了吧。对,就是这里。只要将常用的Include都放入这里就可以达到你要的效果。

0条大神的评论

发表评论