vb.net基类事件继承的简单介绍
VB.NET的Form的所有事件
名称
10多年的许昌网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整许昌建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“许昌网站设计”,“许昌网站推广”以来,每个客户项目都认真落实执行。
说明
Activated
当使用代码激活或用户激活窗体时发生。
AutoSizeChanged
当 AutoSize 属性更改时发生。
AutoValidateChanged
当 AutoValidate 属性更改时发生。
BackColorChanged
当 BackColor 属性的值更改时发生。(从 Control 继承。)
BackgroundImageChanged
当 BackgroundImage 属性的值更改时发生。(从 Control 继承。)
BackgroundImageLayoutChanged
当 BackgroundImageLayout 属性更改时发生。(从 Control 继承。)
BindingContextChanged
当 BindingContext 属性的值更改时发生。(从 Control 继承。)
CausesValidationChanged
当 CausesValidation 属性的值更改时发生。(从 Control 继承。)
ChangeUICues
焦点或键盘用户界面 (UI) 提示更改时发生。(从 Control 继承。)
Click
在单击控件时发生。(从 Control 继承。)
ClientSizeChanged
当 ClientSize 属性的值更改时发生。(从 Control 继承。)
Closed
关闭窗体时发生。
Closing
关闭窗体时发生。
ContextMenuChanged
当 ContextMenu 属性的值更改时发生。(从 Control 继承。)
ContextMenuStripChanged
当 ContextMenuStrip 属性的值更改时发生。(从 Control 继承。)
ControlAdded
在将新控件添加到 Control.ControlCollection 时发生。(从 Control 继承。)
ControlRemoved
在从 Control.ControlCollection 移除控件时发生。(从 Control 继承。)
CursorChanged
当 Cursor 属性的值更改时发生。(从 Control 继承。)
Deactivate
当窗体失去焦点并不再是活动窗体时发生。
Disposed
当通过调用 Dispose 方法释放组件时发生。(从 Component 继承。)
DockChanged
当 Dock 属性的值更改时发生。(从 Control 继承。)
DoubleClick
在双击控件时发生。(从 Control 继承。)
DragDrop
拖放操作完成时发生。(从 Control 继承。)
DragEnter
在将对象拖入控件的边界时发生。(从 Control 继承。)
DragLeave
将对象拖出控件的边界时发生。(从 Control 继承。)
DragOver
在将对象拖到控件的边界上发生。(从 Control 继承。)
EnabledChanged
在 Enabled 属性值更改后发生。(从 Control 继承。)
Enter
进入控件时发生。(从 Control 继承。)
FontChanged
在 Font 属性值更改时发生。(从 Control 继承。)
ForeColorChanged
在 ForeColor 属性值更改时发生。(从 Control 继承。)
FormClosed
关闭窗体后发生。
FormClosing
关闭窗体前发生。
GiveFeedback
在执行拖动操作期间发生。(从 Control 继承。)
GotFocus
在控件接收焦点时发生。(从 Control 继承。)
HandleCreated
在为控件创建句柄时发生。(从 Control 继承。)
HandleDestroyed
在控件的句柄处于销毁过程中时发生。(从 Control 继承。)
HelpButtonClicked
单击“帮助”按钮时发生。
HelpRequested
用户请求控件帮助时发生。(从 Control 继承。)
ImeModeChanged
在 ImeMode 属性更改后发生。(从 Control 继承。)
InputLanguageChanged
更改窗体的输入语言后发生。
InputLanguageChanging
当用户尝试更改窗体的输入语言时发生。
Invalidated
控件的显示要求重新绘制时发生。(从 Control 继承。)
KeyDown
在控件有焦点的情况下按下键时发生。(从 Control 继承。)
KeyPress
在控件有焦点的情况下字符、空格或退格键时发生。(从 Control 继承。)
KeyUp
在控件有焦点的情况下释放键时发生。(从 Control 继承。)
Layout
在控件应重新定位其子控件时发生。(从 Control 继承。)
Leave
在输入焦点离开控件时发生。(从 Control 继承。)
Load
在第一次显示窗体前发生。
LocationChanged
在 Location 属性值更改后发生。(从 Control 继承。)
LostFocus
在控件失去焦点时发生。(从 Control 继承。)
MarginChanged
当 Margin 属性更改时发生。
MaximizedBoundsChanged
在 MaximizedBounds 属性的值更改后发生。
MaximumSizeChanged
在 MaximumSize 属性的值更改后发生。
MdiChildActivate
在多文档界面 (MDI) 应用程序内激活或关闭 MDI 子窗体时发生。
MenuComplete
当窗体菜单失去焦点时发生。
MenuStart
当窗体菜单接收焦点时发生。
MinimumSizeChanged
在 MinimumSize 属性的值更改后发生。
MouseCaptureChanged
当控件失去鼠标捕获时发生。(从 Control 继承。)
MouseClick
用鼠标单击控件时发生。(从 Control 继承。)
MouseDoubleClick
用鼠标双击控件时发生。(从 Control 继承。)
MouseDown
当鼠标指针位于控件上并按下鼠标键时发生。(从 Control 继承。)
MouseEnter
在鼠标指针进入控件时发生。(从 Control 继承。)
MouseHover
在鼠标指针停放在控件上时发生。(从 Control 继承。)
MouseLeave
在鼠标指针离开控件时发生。(从 Control 继承。)
MouseMove
在鼠标指针移到控件上时发生。(从 Control 继承。)
MouseUp
在鼠标指针在控件上并释放鼠标键时发生。(从 Control 继承。)
MouseWheel
在控件有焦点且鼠标轮移动时发生。(从 Control 继承。)
Move
在移动控件时发生。(从 Control 继承。)
PaddingChanged
在控件空白区更改时发生。(从 Control 继承。)
Paint
在重绘控件时发生。(从 Control 继承。)
ParentChanged
在 Parent 属性值更改时发生。(从 Control 继承。)
PreviewKeyDown
在焦点位于此控件上的情况下,当有按键动作时发生(在 KeyDown 事件之前发生)。(从Control 继承。)
QueryAccessibilityHelp
在 AccessibleObject 为辅助功能应用程序提供帮助时发生。(从 Control 继承。)
QueryContinueDrag
在拖放操作期间发生,并且允许拖动源确定是否应取消拖放操作。(从 Control 继承。)
RegionChanged
当 Region 属性的值更改时发生。(从 Control 继承。)
Resize
在调整控件大小时发生。(从 Control 继承。)
ResizeBegin
窗体进入大小调整模式时发生。
ResizeEnd
窗体退出大小调整模式时发生。
RightToLeftChanged
在 RightToLeft 属性值更改时发生。(从 Control 继承。)
RightToLeftLayoutChanged
更改 RightToLeftLayout 属性值之后发生。
Scroll
用户或代码滚动工作区时发生。(从 ScrollableControl 继承。)
Shown
只要窗体是首次显示就发生。
SizeChanged
在 Size 属性值更改时发生。(从 Control 继承。)
StyleChanged
在控件样式更改时发生。(从 Control 继承。)
SystemColorsChanged
系统颜色更改时发生。(从 Control 继承。)
TabIndexChanged
此 API 支持 产品 基础结构,不能在代码中直接使用。 当 TabIndex 属性的值更改时发生。
TabStopChanged
当 TabStop 属性更改时发生。
TextChanged
在 Text 属性值更改时发生。(从 Control 继承。)
Validated
在控件完成验证时发生。(从 Control 继承。)
Validating
在控件验证时发生。(从 Control 继承。)
VisibleChanged
在 Visible 属性值更改时发生。(从 Control 继承。)
VB.net 编程时,自定义的类如何继承AcadDocument. inherits Acaddocument 报错。
搜一下:VB.net
编程时,自定义的类如何继承AcadDocument.
inherits
Acaddocument
报错。
Microsoft .NET 中的基类继承
继承概述
面向对象编程 (OOP) 语言的一个主要功能就是 继承 继承是指这样一种能力 它可以使用现有类的所有功能 并在无需重新编写原来的类的情况下对这些功能进行扩展 在 Microsoft® Visual Basic® NET 发布之前 Visual Basic 程序员并不具备这种能力 在 Visual Basic NET 中 您可以继承 Microsoft NET 框架中的类 也可以继承您自己创建的类 在本文中 我们将学习如何使用继承 并了解继承是如何大大缩短编程时间的 简单示例
在您创建的许多类中 您会发现您常常需要与先前创建的类中的属性和方法相同的属性和方法 例如 如果有一个名为 Person 类的基类 该类包含 LastName 和 FirstName 属性以及 Print 方法 您会发现对于 Employee 类您也需要这些属性和方法 您可能还需要其他属性 例如 EmployeeID 和 Salary 如果从 Person 类(基类)继承 您可以将这些属性添加到新的 Employee 类中 并且仍然可以访问 Person 类中的所有属性 继承是指某个类可将其自身定义为具有某个特定类的所有属性和方法 然后再通过添加其他属性和方法对基类的定义进行扩展的能力
继承术语
在深入研究这个主题之前 让我们先来定义几个术语 通过继承创建的新类称为 子类 被继承的类称为 基类 父类 或 超类 在某些 OOP 语言中 一个子类可以继承多个基类 也就是说 如果有一个 Person 类和一个 Car 类 则 Driver 类可以继承这两个类的所有属性和方法 而在 NET 中 只允许单一继承 因此每个子类只能有一个基类
NET 支持三类继承 实现继承 接口继承和可视继承 实现继承是指使用基类的属性和方法而无需额外编码的能力 接口继承是指仅使用属性和方法的名称 但是子类必须提供实现的能力 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力 在 NET 中 一个类可以从某个基类继承而来 而这个基类又可以从另外一个类继承而来 而且 您可以在一个类中使用一个或多个接口
使用继承的原因
继承可以避免重复编写相同的代码 因此十分有用 如果有两个单独的类 而每个类都必须实现 FirstName 和 LastName 属性 则可能会出现重复代码 如果要更改某个属性的实现方式 则需要查找已实现这些属性的所有类以进行更改 这不仅要耗费大量时间 还增加了不同类中出现错误的风险
在考虑使用继承时 有一点需要注意 那就是两个类之间的关系应该是 属于 关系 例如 Employee 是一个人 Manager 也是一个人 因此这两个类都可以继承 Person 类 但是 Leg 类却不能继承 Person 类 因为腿并不是一个人
覆盖
从基类中继承功能时 您可能会发现在基类中编写的一般方法仅执行继承类所需的部分功能 要执行所需的全部功能 您可以在新类中覆盖基类的方法 而无需使用新的名称创建一个全新的方法
进行覆盖时 您可以选择完全覆盖基类的方法 也可以在继承类中编写代码来执行某些操作 然后再调用基类的方法 在覆盖时 请务必仍然使用与原始方法相同的合约(参数和返回类型) 也可以选择先调用基类的方法 然后在执行完基类的方法后编写其他代码
继承基类
继承使您可以在一个类中使用另一个类的全部属性和方法 您可以使用关键字 Inherits 来获得基类的功能 而无需将代码从一个类复制并粘贴到另一个类中
实现继承
本文将创建一个新类 LineDelim 它将继承 Creating Classes in NET(英文)一文中创建的 Line 类的所有功能 之后 本文将通过添加两个其他属性和一个方法对 Line 类进行扩展 要添加的第一个属性是 Delimiter 使用它可以获得一个分隔符字符 并将其设置到类中 此分隔符将用于将行中的所有空格替换为分隔符字符 要添加的第二个属性是 OriginalLine 它将用于在向文本行插入新的分隔符之前保留文本的原始行 要创建的新方法是 ReplaceAll() 它将用于将文本行中的所有空格替换为分隔符字符 然后我们将学习如何覆盖 GetWord 方法 以便使用此分隔符(而不是空格)分隔文本行并搜索第一个词 构建示例窗体
要创建窗体 请单击 Project(项目) 然后单击 Add Windows Form(添加 Windows 窗体) 将窗体命名为 frmLineTest VB 并单击 OK(确定)
然后在该窗体上创建相应的控件并设置属性
构建 Line 类
接下来将构建要继承的 Line 类
从菜单中单击 Project(项目) 然后单击 Add Class(添加类) 键入如下所示的代码
Public Class LinePrivate mstrLine As StringProperty Line() As StringGetReturn mstrLineEnd GetSet(ByVal Value As String)mstrLine = ValueEnd SetEnd PropertyReadOnly Property Length() As IntegerGetReturn mstrLine LengthEnd GetEnd PropertyPublic Function GetWord() As StringDim astrWords() As StringastrWords = mstrLine Split( ToCharArray())Return astrWords( )End FunctionEnd Class
创建子类 既然窗体和基类都已经创建完毕 现在便可以开始执行继承了
单击 Project(项目) 然后单击 Add Class(添加类) 将该类命名为 LineDelim vb 并单击 OK(确定) 添加新类时 请修改 Visual 所创建的代码 使之与下面的示例代码相似
Public Class LineDelimInherits Line
End Class
因为添加了 Inherits Line 语句 所以您可以在这一新创建的类中使用 Line 类的所有属性和方法
试一试打开 frmLineTest vb 窗体 双击 Get Word(取词)按钮 向此按钮的单击事件过程添加以下代码
Protected Sub btnFirst_Click(ByVal sender As Object _
ByVal e As System EventArgs) Handles btnFirst ClickDim oLine As LineDelim = New LineDelim()oLine Line = txtLine TexttxtFirstWord Text = oLine GetWord()End Sub
运行项目 并在窗体上单击 Get Word(取词)按钮 您将看到 The 一字出现在按钮旁边的只读文本框中 Inherits 语句的功能非常强大 只需要使用这一个语句 就可以在 LineDelim 类中使用 Line 类的所有属性和方法 尽管这个新类尚未执行任何新的操作 但它却表明从 Line 类中继承的所有代码都可以正常工作
添加其他功能 现在 您可以使用其他属性和方法对 LineDelim 类进行扩展 要向 LineDelim 类添加两个新的属性 请执行以下步骤
在上一部分添加的 Inherits 语句后添加两个 Private 变量 如下所示
Private mstrDelim As String = Private mstrOriginal As String
键入如下代码 为这两个 Private 变量添加适当的 Property 语句 您可以将以下代码放在上面输入的两行代码后面(紧挨这两行)
Public Property Delimiter() As StringGetReturn mstrDelimEnd GetSet(ByVal Value As String)mstrDelim = ValueEnd SetEnd PropertyPublic ReadOnly Property OriginalLine() As StringGetReturn mstrOriginalEnd GetEnd Property
现在您可以使用 Delimiter 属性设置并获取 Private 变量 mstrDelim 的值
如果不希望其他人更改这些属性 您可以将属性设为只读 要执行此操作 请不再使用 Set 语句 并在 Property 语句中添加 ReadOnly 属性 有关示例 请参见上面代码中显示的 OriginalLine 属性声明
接下来 需要创建一个称为 ReplaceAll 的方法 此方法可以将文本行中的所有空格替换为传递到 Delimiter 属性中的分隔符字符
Public Function ReplaceAll() As StringmstrOriginal = MyBase LineReturn MyBase Line Replace( mstrDelim ToChar())End Function
ReplaceAll 方法通过基类的 Line 方法检索原始文本行 而以前从基类中检索属性时使用的是 MyBase Line 语法 ReplaceAll 函数将 MyBase Line 属性的值放入您刚刚为该类创建的 Private 变量 mstrOriginal 中 String 数据类型的 Replace 方法将字符串字符的所有实例替换为在 Delimiter 属性中设置的新分隔符字符 mstrDelim MyBase 关键字 可以从任一子类使用 MyBase 关键字 以调用基类中的任何属性或方法 即使基类的方法在子类中已被覆盖 您也可以使用该关键字对其进行调用 例如 如果在基类中存在 ReplaceAll 方法 但在子类中该方法已被覆盖 您可以从子类的 ReplaceAll 方法中调用基类的 ReplaceAll 方法
试一试打开 frmLineTest VB 窗体 双击 Replace(替换)以调出单击事件过程 在 btnReplace 按钮的单击事件中编写以下代码
Protected Sub btnReplace_Click( _ ByVal sender As Object _ByVal e As System EventArgs) Handles btnReplace ClickDim oLine As LineDelim = New LineDelim()oLine Delimiter = txtDelim TextoLine Line = txtLine TexttxtReplace Text = oLine ReplaceAll()End Sub
此代码将 Delimiter 属性设置为在示例窗体的 txtDelimiter 文本框中输入的值 然后您可以调用 ReplaceAll 方法 将文本行中的所有空格更改为新的分隔符字符
按 F 键运行该项目 单击 Replace(替换) 您将看到 在此按钮旁边的文本框中 句中的每个词之间都有一个逗号 覆盖方法 添加 Delimiter 属性后 您可能想更改 LineDelim 类中的 GetWord 方法 以便使用相应的分隔符替代 Line 类使用的单个空格 因为您不一定想更改基类 所以需要覆盖 LineDelim 类中 GetWord 方法的功能 在 LineDelim 类中创建新的 GetWord 方法之前 您需要在 Line 类的 GetWord 方法声明中添加一个关键字
在 Solution Explorer(解决方案资源管理器)窗口中 打开 Line vb 类的代码窗口 找到 GetWord 方法的声明(声明不包含参数) 如下所示 Public Overloads Function GetWord() As String在函数声明中添加关键字 Overridable 如下所示(没有此关键字 就无法覆盖此方法) Public Overridable Overloads Function GetWord() As String打开 LineDelim vb 类 并使用如下代码添加新的 GetWord 方法
Public Overloads Overrides Function GetWord() As StringDim astrWords() As StringastrWords = MyBase Line Split(mstrDelim ToCharArray())Return astrWords( )End Function
如果要更改基类中方法的功能 则有必要在函数声明中添加 Overrides 关键字 现在 LineDelim 类中的 GetWord 方法就可以使用 Delimiter 属性的值来分隔句中的词
如果只覆盖其中一个 GetWord 方法 则代码只能查看这一个版本的方法 而无法调用其他版本的 GetWord 方法 要显示所有方法 您必须覆盖每一个方法 就象您在 LineDelim 类中所执行的操作一样
试一试按 F 键运行该项目 在句中的每个词之间都输入一个逗号 并在 Delimiter(分隔符)文本框中输入一个逗号 单击 Get Word(取词) 句中的第一个词将出现在该按钮旁边的文本框中
抽象类 在本文上一部分的示例中 我们学习了如何创建 Person 对象 这是因为我们想处理普通的人 但是您可能会发现 如果不先添加一些特定的行为和/或数据 就无法使用 Person 类执行任何操作 因此您可以将 Person 类变为抽象类 抽象类仅定义将由子类创建的一般属性和方法
将 Person 类定义为只能被继承的抽象类 而不是在运行时实际创建的对象 从该类继承的每个类(如 Employee 类)都将使用特定的功能来创建所有相应的属性和方法 例如 Employee 类将创建实际的 Print 方法 而 Person 类仅定义必须存在 Print 方法 Person 类中没有与 Print 方法相关联的代码 使用抽象类的原因有多种 对于强制子类设计人员实现应用程序通常所需的所有接口 抽象类非常有用 您可以在不破坏客户端应用程序的情况下向子类添加新方法 这是使用接口所无法实现的 可以在基类中提供许多默认实现方法 从而减少子类需要完成的工作量
接口继承 创建抽象类时 请使用关键字 Interface 而不是 Class 为接口命名 然后定义需要子类实现的所有属性和方法 这是因为基类中没有可以实现的属性和方法 它只包含一般数据 而不包含方法 您所创建的只是一个合约 它规定所有使用此接口的子类都必须遵循一定的规则
现在 请在已创建的项目中添加一个新类 从 Visual Studio 菜单中 单击 Project(项目) 然后单击 Add Class(添加类) 在类中添加以下代码
Interface PersonProperty FirstName() As StringProperty LastName() As String
Sub Print()Sub Talk()End Interface
您会发现 您定义属性和子过程的方法与您通常定义这些属性和过程的方法一样 唯一的差别在于 您没有为它们编写任何代码 现在来看看如何在类定义中使用此接口
在上一步骤创建的类文件中添加以下代码
Public Class EmployeeImplements PersonPrivate mstrFirstName As StringPrivate mstrLastName As StringProperty FirstName() As String _Implements Person FirstNameGetReturn mstrFirstNameEnd GetSetmstrFirstName = ValueEnd SetEnd PropertyProperty LastName() As String _Implements Person LastNameGetReturn mstrLastNameEnd GetSetmstrLastName = ValueEnd SetEnd PropertySub Print() Implements Person Print 在此处添加一些代码 End Sub
Sub Talk() Implements Person Talk 在此处添加一些代码End SubEnd Class
在 Employee 类定义之后的第一行是 Implements Person 此关键字表示您要遵守 Person 接口中定义的合约 现在您可以定义该合约中的所有属性和方法 在每一个 Property 语句后面 都必须包含 Implements 关键字 并且必须指定接口的名称和您正在使用的方法/属性的名称(两个名称之间有一个点 [ ]) Visual 将跟踪每一个接口 在所有接口创建完毕之前 您不能编译应用程序 如果要运行代码 则需要创建相应的子过程 因为在上面的示例中这些子过程被保留为空 创建所有子过程后 您就可以与您通常创建并使用任何其他对象一样 声明并使用新的 Employee 对象了
选择要使用的继承类型 有时候很难决定到底是使用实现继承还是使用接口继承 很多情况下 可能两种继承都会用到 但都只涉及一小部分 例如 您可能需要在 Line 类中添加必须被子类覆盖的方法定义 在过程定义中使用 MustOverride 关键字即可实现此操作
Public MustOverride Sub Init()将此定义添加到类中以后 其作用类似于一个接口 在子类中 必须定义 Init 方法 并且该方法必须使用 Overrides 关键字 以下是如何定义 Init 方法的示例
Public Overrides Sub Init()mstrDelim = mstrLine = 测试行 End Sub同样 请记住使用 Overrides 关键字 该关键字用于通知编译器此方法将覆盖父类中的 Init 方法
注意 Microsoft NET 框架的联机帮助中提供了设计指南 可以帮助您决定要使用的继承类型 阻止继承在某些情况下 您可能不希望其他类继承您的类 如果是这样 您可以使用关键字 NotInheritable 来阻止类的继承
Public Class NotInheritable Employee 类定义End ClassVisual Basic 以来的新增功能
使用 Visual Basic NET 您可以继承 NET 框架包含的所有类 您可以创建自己的类 使这些类继承现有的类 并通过对代码进行简单更改来添加或删除功能
lishixinzhi/Article/program/net/201311/11397
vb.net中如何继承另一个项目中的类?
两个项目A和B,A已经编译通过了,重新生成解决方案,右键B项目添加引用,找到A项目的dll,引用进来就可以了。
名称栏目:vb.net基类事件继承的简单介绍
文章网址:http://ybzwz.com/article/dddgdjd.html