得到领导指示我冲了杯咖啡恭敬地走向大李放在他桌上大李嘴角翘笑着说:“别这么客气来坐让我看看你昨天继承学习得如何样今天我们来看下VB.NET提供新继承方式可视化继承”
“可视化?是不是就是指在可视化编辑器里就可以实现继承方式?”我跟着问了句
大李点头说:“当然就是看得见继承般指就是对窗体继承”
我想了下说:“在VB.NET中窗体都已经是类形式了如果要实现窗体继承是不是生成个基类窗体然后通过声明Inherits方式在新窗体中实现对基类窗体继承?”
“大体上是这样但今天我们来看下如何通过可视化编译环境来实现这个过程首先是建个基类窗体”大李边说边打开VB.NET编译器从菜单中选择从“文件”菜单中依次选择“新建”和“项目”打开“新建项目”对话框创建了个名为 “可视继承” Windows 应用
然后右击解决方案资源管理器中“可视继承”项目节点并选择“属性”在项目属性中将输出类型从“Windows 应用”更改为“类库”然后单击“确定”
在“工具箱”“Windows 窗体”选项卡上将个按钮添加到窗体中命名为btnProtected然后在它“属性”窗口中将 Text 属性设置为 “保护”同时将 Modiers 属性设置为 Protected
接着大李双击 btnProtected 按钮切换到代码窗口书写了这样代码:
Private Sub btnProtected_Click(ByVal sender As .Object, _
ByVal e As .EventArgs) Handles btnProtected.Click
MsgBox("protected按钮")
End Sub
接着切换回设计窗口添加了第 2个按钮btnPrivate并将 Text 属性设置为 “私有” Modiers 属性设置为 Private
双击 btnPrivate 按钮添加了如下代码:
Private Sub btnPrivate_Click(ByVal sender As .Object, _
ByVal e As .EventArgs) Handles btnPrivate.Click
MsgBox("private按钮")
End Sub
最后从“生成”菜单中选择“生成”在项目bin文件夹内生成了个“可视继承.dll”文件
“是不是这样就可以完成基类窗体建造了?”
“是呀”大李手也没停地说“我们再通过集成环境来建个派生窗体吧”
大李从“文件”菜单中选择“添加项目”中“新建项目”创建了个名为“派生窗体”Windows 应用右击项目节点选择“添加”中“继承窗体”
在弹出“添加新项”对话框中可以看到已经选定了“继承窗体”大李点击了“打开”又弹出个“继承选择器”对话框中从 “可视继承.dll”中选择“Form1”作为要从其中继承窗体然后单击“确定”
于是在“派生窗体”项目中创建了个从 “可视继承”项目中窗体Form1派生出窗体命名为“InheritanceForm”
随即在Windows 窗体设计器中派生窗体继承而来按钮左上角会带有个箭头标志符号
大李拖动了下“保护”按钮并任意地更改了下按钮大小然后转过头来对我说:“你来试试改变下‘私有’按钮大小吧”我不以为然接过鼠标可是任凭我如何点击拖拽它仍岿然不动
“啊?出了什么问题?”我大吃惊
“自已想想喽”大李开始品味我倒给他咖啡了
我开始在大脑里搜索起这两天学习内容慢慢地转过弯来“私有”按钮在基类窗体内修饰符被大李设为“Private”也就是说它在派生类中也不可被更改我小心翼翼地向大李介绍说明我想法
“没错别怕说错嘛”大李点了点头“在窗体中Control控件属性也会跟着修饰符设置而决定派生类能否对其进行更改这个按钮被设为了Private它大小和位置属性当然在派生类中也无法被更改喽”
看到我若有所思地点着头大李给我出了道题:“你来试试改变下在派生窗体中点击‘保护’按钮时弹出消息框内容就改为‘派生保护按钮’吧”
我跟大李在基类窗体中操作地样双击了该按钮切换到代码窗口写了这句代码:
Private Sub btnProtected_Click(ByVal sender As .Object, _
ByVal e As .EventArgs) Handles btnProtected.Click
MsgBox("派生保护按钮")
End Sub
接着我右击解决方案资源管理器中 “派生窗体” 项目并选择“设为启动项目”然后右击解决方案资源管理器中 “派生窗体”项目并选择“属性”在“派生窗体 属性页”对话框中将“启动对象”设置为继承窗体InheritanceForm
按 F5 键运行应用满怀欣喜地点击了下“保护”按钮咦结果弹出了两个消息框第个弹出是基类窗体中写按钮消息内容“Protected按钮”然后才弹出刚写消息“派生保护按钮”我下就愣住了“我不是已经改写了click事件响应代码了吗?为什么基类消息没有屏蔽掉?”
大李悠悠然喝下口咖啡放下杯子拍了拍我说:“屏蔽?你能屏蔽基类私有成员吗?”
“啊?”我赶紧看了下基类窗体中click事件处理“真呢是private sub!”我傻傻地笑起来
“对于窗体编程而言默认是对自身处理没有考虑到对它继承所以Control控件事件处理都是以private来修饰用于封装但是修改也很容易不是吗?”大李又拍了拍我起身出门了
我拼命地搓了搓脸开始回忆了下实现继承思路方法终于开始动手改
首先在基类窗体中写:
Protected Overridable Sub btnProtected_Click(ByVal sender As .Object, ByVal e As .EventArgs) Handles btnProtected.Click
MsgBox("protectedControl控件")
End Sub
我正准备到派生类中改写代码大李又回来了他站到我身后说:“你先别急着写看下代码窗口上方两个下拉框左边个是类名你选择下InheritanceForm类overrides在右边思路方法名称下拉框中就会出现可重写思路方法名称了”
我按大李话做果然在思路方法名称下拉框中看到了btnProtected_Click点击下就会出现该思路方法空白代码段我往代码段里添加了句消息框内容:
Protected Overrides Sub btnProtected_Click(ByVal sender As Object, _
ByVal e As .EventArgs)
MsgBox("派生保护按钮")
End Sub
运行!点击下“保护”按钮果然只出现了个消息框:“派生保护按钮”
最新评论