vb.net之旅十一可视继承

闭关修练了一晚上VB.NET的继承程序的我,早上进入公司时自信满满。白经理看到我,问了一句:“学习得怎么样?对VB.NET是不是已经可以上手了?”我点了点头:“应该可以做点事了吧。”“好的,”白经理拍了拍我肩膀说,“再跟大李好好学习几天,会有机会的。”

得到领导的指示,我冲了杯咖啡,恭敬地走向大李,放在他的桌上。大李嘴角一翘,笑着说:“别这么客气,来,坐。让我看看你昨天继承学习得怎么样。今天我们来看一下VB.NET提供的新的继承方式,可视化继承。”

“可视化?是不是就是指在可视化编辑器里就可以实现的继承方式?”我跟着问了一句。

大李点头说:“当然,就是看得见的继承。一般指的就是对窗体的继承。”

我想了一下说:“在VB.NET中,窗体都已经是类的形式了,如果要实现窗体继承,是不是生成一个基类窗体,然后通过声明Inherits的方式在新窗体中实现对基类窗体的继承?”

“大体上是这样的,但今天我们来看一下怎么通过可视化编译环境来实现这个过程。首先,是建一个基类窗体。”大李一边说,一边打开VB.NET编译器,从菜单中选择从“文件”菜单中依次选择“新建”和“项目”,打开“新建项目”对话框。创建了一个名为 “可视继承”的Windows 应用程序。

然后右击解决方案资源管理器中的“可视继承”项目节点并选择“属性”。在项目的属性中,将输出类型从“Windows 应用程序”更改为“类库”,然后单击“确定”。

在“工具箱”的“Windows 窗体”选项卡上将一个按钮添加到窗体中。命名为btnProtected。然后在它的“属性”窗口中,将 Text 属性设置为 “保护”,同时将 Modifiers 属性设置为 Protected。

接着大李双击 btnProtected 按钮,切换到代码窗口,书写了这样的代码:

Private Sub btnProtected_Click(ByVal sender As System.Object,_

ByVal e As System.EventArgs) Handles btnProtected.Click

MsgBox("protected的按钮")

End Sub




接着切换回设计窗口,添加了第二个按钮btnPrivate,并将 Text 属性设置为 “私有”, Modifiers 属性设置为 Private。

双击 btnPrivate 按钮,添加了如下代码:

Private Sub btnPrivate_Click(ByVal sender As System.Object,_

ByVal e As System.EventArgs) Handles btnPrivate.Click

MsgBox("private的按钮")

End Sub




最后从“生成”菜单中选择“生成”,在项目的bin文件夹内生成了一个“可视继承.dll”文件。

“是不是这样就可以完成基类窗体的建造了?”

“是呀。”大李手也没停地说,“我们再通过集成环境来建一个派生的窗体吧。”

大李从“文件”菜单中选择“添加项目”中的“新建项目”,创建了一个名为“派生窗体”的Windows 应用程序。右击项目节点,选择“添加”中的“继承的窗体”。

在弹出的“添加新项”对话框中,可以看到已经选定了“继承的窗体”,大李点击了“打开”。又弹出一个“继承选择器”对话框中,从 “可视继承.dll”中选择“Form1”作为要从其中继承的窗体,然后单击“确定”。

于是在“派生窗体”项目中创建了一个从 “可视继承”项目中的窗体Form1派生出的窗体,命名为“InheritanceForm”。

随即在Windows 窗体设计器中,派生窗体的继承而来的按钮左上角会带有一个箭头标志符号。

大李拖动了一下“保护”按钮,并任意地更改了一下按钮的大小。然后,转过头来对我说:“你来试试改变一下‘私有’按钮的大小吧。”我不以为然的接过鼠标,可是,任凭我如何点击,拖拽,它仍岿然不动。

“啊?出了什么问题?”我大吃一惊。

“自已想想喽。”大李开始品味我倒给他的咖啡了。

我开始在大脑里搜索起这两天学习的内容,慢慢地转过弯来,“私有”按钮在基类窗体内修饰符被大李设为“Private”,也就是说它在派生类中也不可被更改。我小心翼翼地向大李说明我的想法。

“没错,别怕说错嘛。”大李点了点头,“在窗体中的控件属性也会跟着修饰符的设置而决定派生类能否对其进行更改。这个按钮被设为了Private,它的大小与位置属性当然在派生类中也无法被更改喽。”

看到我若有所思地点着头,大李给我出了道题:“你来试试改变一下在派生窗体中,点击‘保护’按钮时弹出消息框的内容,就改为‘派生的保护按钮’吧。”

我跟大李在基类窗体中操作地一样,双击了该按钮,切换到代码窗口。写了这句代码:

Private Sub btnProtected_Click(ByVal sender As System.Object,_

ByVal e As System.EventArgs) Handles btnProtected.Click

MsgBox("派生的保护按钮")

End Sub




接着,我右击解决方案资源管理器中的 “派生窗体” 项目并选择“设为启动项目”。然后,右击解决方案资源管理器中的 “派生窗体”项目并选择“属性”。在“派生窗体 属性页”对话框中,将“启动对象”设置为继承的窗体InheritanceForm。

按 F5 键运行应用程序,满怀欣喜地点击了一下“保护”按钮。咦,结果弹出了两个消息框,第一个弹出的是基类窗体中写的按钮消息内容“Protected的按钮”,然后才弹出刚写的消息“派生的保护按钮”。我一下就愣住了,“我不是已经改写了click事件响应程序的代码了吗?为什么基类的消息没有屏蔽掉?”

大李悠悠然喝下一口咖啡,放下杯子。拍了拍我说:“屏蔽?你能屏蔽基类私有的成员吗?” “啊?”我赶紧看了一下基类窗体中的click事件处理程序。“真的呢,是private sub!”我傻傻地笑起来。 “对于窗体编程而言,默认的是对自身的处理,没有考虑到对它的继承,所以控件的事件处理程序都是以private来修饰的,用于封装。但是修改也很容易,不是吗?”大李又拍了拍我,起身出门了。 我拼命地搓了搓脸,开始回忆了一下实现继承的方法,终于开始动手改程序。 首先,在基类窗体中写: Protected Overridable Sub btnProtected_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnProtected.Click MsgBox("protected的控件") End Sub 我正准备到派生类中改写代码,大李又回来了,他站到我身后说:“你先别急着写,看一下代码窗口上方的两个下拉框,左边一个是类名,你选择一下InheritanceForm类的overrides,在右边的方法名称下拉框中就会出现可重写的方法的名称了。” 我按大李的话做,果然,在方法名称下拉框中看到了btnProtected_Click,点击一下,就会出现该方法的空白代码段,我往代码段里添加了一句消息框的内容: Protected Overrides Sub btnProtected_Click(ByVal sender As Object,_ ByVal e As System.EventArgs) MsgBox("派生的保护按钮") End Sub 运行!点击一下“保护”按钮,果然只出现了一个消息框:“派生的保护按钮”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")