VB中动态创建控件

合集下载

vb动态添加删除控件汇总

vb动态添加删除控件汇总

VB 动态添加删除控件汇总1. 概述在使用Visual Basic 进行程序设计的过程中,如果能在运行时刻动态地创建和删除控件,可以极大地丰富界面的处理和变化。

本人在设计网络监控系统时,需要在原理图与实物示意图间切换。

切换的过程采用本文介绍控件的动态创建和删除来实现,有效地节省了系统资源,同时也有利于简化界面的维护。

下面将就Visual Basic 6.0 中的控件在运行时刻的创建和删除的两种方法——控件数组和控件集合作详细的阐述。

2. 基于控件数组的动态控件的创建与删除vb 中的控件数组实际上也是一种数组,其中的每个控件具有相同的Name 属性,但具有不同的Index 属性,在这里Name 属性类似于数组的名字,而Index 属性类似于数组的下标同时,控件数组也支持普通VBA 数组的LBound 、UBound 和Count 方法,控件数组中的控件可以共享一个事件过程,便于代码的编写和集中处理,这正是使用控件数组的最大的理由。

但是控件数组与普通的数组并非完全一样,它不需要定义大小,只有这样我们才可以动态的扩展[kuo zhan]它。

下面给出利用Load 命令动态添加控件和Unload 命令动态删除控件的一般方法:(1)首先在窗体上放置一个TextBox ,其Name 属性设置为Text1 ,Index 属性设置为0 ,这样我们就创建了一个TextBox 控件数组,其中有一个成员。

(2)在窗体上放置一个命令按钮Command1 ,在其Click 事件中添加如下的代码:LoadText1(1)Text1(1).left=0Text1(1).visible=true(3)在窗体上放置一个命令按钮Command2 ,在其Click 事件中添加如下的代码:Unload Text1(1)(4)运行。

单击命令按钮Command1 ,窗体上会出现一个新的文本框;单击命令按钮Command2 ,窗体上刚出现的新的文本框就被删除。

VB中动态创建控件

VB中动态创建控件

VB中动态创建控件VB中动态创建控件创建数据驱动窗体所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。

举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。

要做到这一点就得利用VB动态添加控件的功能。

动态创建控件无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时动态地创建控件。

你可以通过控件数组做到这一点,但VB6的Controls集合所提供的Add方法,功能更强大,灵活性更高。

使用该方法,你不需要在设计时将控件的实例放在窗体上。

实际上,用Add 方法你甚至可以创建程序在编译时根本不存在的控件。

这种方法的用法也很简单:‘ 声明一个窗体级的变量Dim WithEvents txtTotal As TextBoxSub CreateTextbox()‘ 创建新的Textbox控件Set txtTotal = Controls.Add("VB.TextBox", "txtTotal")‘ 将控件移动到你所需要的地方txtTotal.Move 1000, 800, 1200, 300‘ 创建时,所有的控件都是不可见的txtTotal.Visible = TrueEnd Sub请注意Add方法的第二个参数:分配给控件的名称。

从代码可读性出发,这个名称一般都与变量名相同。

你可以用这个名称从Controls集合中获取相应的控件或移除该控件。

例如:Controls.Remove "txtTotal"在变量声明时加上WithEvents关键字,即使在设计时窗体不存在该控件,你也可以为该控件的事件编写代码。

上面所讲的方法只适合解决VB内置的控件。

例如,当你要添加一个TreeView控件时,VB会要求你证明你已经得到了合法的授权来创建该控件的实例。

在 VB 中动态添加和删除控件

在 VB 中动态添加和删除控件

Wi t h e x t C t l ‘ 为控T u e’ r He i g h t=2 0 0 0


、 矾d t h=2 0 0 0
. .
Ca p t i o n-I ’ 动态按钮 ”
Wi d nl =2 0 0 0 To p= 1 0 0 0 L e f t =1 0 0 0
置其属性 ,也就是说控件在设计 时已经存在 , 在程序运行过程 中只 能改变其属性 。那么 能不 能在程序运行过程 中添加 或删 除未 引用 的控件 呢? 回答是肯定 的,在程序 运行 过程 中即可以 添加所需要 的控件 , 当用完时就可删除该控件 ,
En dW i t h

E n d Su b
F o r m1 . C o n t r o l s . R e mo v e ” b t n O b j 该控件 的名 称为 b t n Ob j
E n d S u b
下:
总 之 ,通 过 Ad d方 法 和 R e mo v e方 法 可
以动 态 的添加 和删 除控件 ,使在 编程 时对 控
用是在创建程序界面时添加 ,然后根据需要设

Wi t h F o r ml ! c m d O b j 1 ‘ 为控 件设 置属
Vi s i b l e= T r u e
Ad d ( ” ms d a ag t r i d l i b . d ta a g r i d ” , _” d a ag t r i d 1 ” )
_
个控件并返 回一个对该控件 的引用 。语法如
o b j e c t . Ad d( P r o g l D, n a me , c o n t a i n e r ) 0b j e c t必 需的。一 个对象表达 式 P r o g I D 必 需 的。 一 个标 识 控 件 的 字 符

VB实现自我注册控件

VB实现自我注册控件

VB实现自我注册控件VB语言是一种面向对象的编程语言,可用于开发图形用户界面(GUI)应用程序。

在VB中,可以通过编写自定义控件来增强应用程序的功能。

本文将介绍如何使用VB实现自我注册控件。

1.创建自定义控件:首先,需要创建一个新的VB项目,并添加一个新的用户控件。

可以通过以下步骤完成:-在"解决方案资源管理器"窗口中,右键单击项目名称,选择"添加"->"新建项"。

-在弹出的对话框中选择"用户控件",并指定一个名称,然后点击"添加"按钮。

-在设计视图中,可以向控件添加所需的控件和代码,以满足应用程序的需求。

2.实现自我注册功能:自我注册是指在用户控件中编写代码来自动将控件注册到工具箱中,以便在其他项目中重复使用。

可以通过以下步骤实现自我注册功能:- 使用`ToolboxItem(true)`属性标记自定义控件类,使之能够在工具箱中显示。

- 编写一个自定义的设计器类,并使用`Designer`属性将其与自定义控件类关联。

-在用户控件的代码视图中,增加以下代码:```vb<ToolboxItem(True)><Designer(GetType(CustomControlDesigner))>Public Class CustomControl'控件的代码和属性'控件的构造函数和事件处理方法End ClassPublic Class CustomControlDesignerInherits System.Windows.Forms.Design.ControlDesignerDim svc As ITypeResolutionService =CType(Me.GetService(GetType(ITypeResolutionService)), ITypeResolutionService)svc.ReferenceAssembly(System.Reflection.Assembly.GetExecutin gAssembly(.Location)Dim typeName As String = Me.GetType(.Namespace & "." & Me.GetType(.Name.Substring(0, Me.GetType(.Name.Length - "Designer".Length)Dim type As Type = svc.GetType(typeName)If (type IsNot Nothing) ThenDim host As IDesignerHost =CType(Me.GetService(GetType(IDesignerHost)), IDesignerHost) Dim tp As ToolboxItem = New ToolboxItem(type.FullName)Dim tlh As System.Drawing.Design.ToolboxItemCreatorCallback = New System.Drawing.Design.ToolboxItemCreatorCallback(AddressOf CreateInstance)type.Assembly.GetCustomAttributes(GetType(ToolboxItemAttribu te), False)HosttoolboxService.AddCreator(tlh, tp)End IfEnd SubPrivate Function CreateInstance(ByVal serializedObject As icContainer, ByVal reportedError As String) As Object Return cf.CreateInstance(serializedObject, reportedError)End FunctionEnd Class```通过以上步骤,自定义控件将被自动注册到工具箱中,并可以在其他VB项目中使用。

vb动态添加删除控件汇总

vb动态添加删除控件汇总

VB 动态添加删除控件汇总1. 概述在使用Visual Basic 进行程序设计的过程中,如果能在运行时刻动态地创建和删除控件,可以极大地丰富界面的处理和变化。

本人在设计网络监控系统时,需要在原理图与实物示意图间切换。

切换的过程采用本文介绍控件的动态创建和删除来实现,有效地节省了系统资源,同时也有利于简化界面的维护。

下面将就Visual Basic 6.0 中的控件在运行时刻的创建和删除的两种方法——控件数组和控件集合作详细的阐述。

2. 基于控件数组的动态控件的创建与删除vb 中的控件数组实际上也是一种数组,其中的每个控件具有相同的Name 属性,但具有不同的Index 属性,在这里Name 属性类似于数组的名字,而Index 属性类似于数组的下标同时,控件数组也支持普通VBA 数组的LBound 、UBound 和Count 方法,控件数组中的控件可以共享一个事件过程,便于代码的编写和集中处理,这正是使用控件数组的最大的理由。

但是控件数组与普通的数组并非完全一样,它不需要定义大小,只有这样我们才可以动态的扩展[kuo zhan]它。

下面给出利用Load 命令动态添加控件和Unload 命令动态删除控件的一般方法:(1)首先在窗体上放置一个TextBox ,其Name 属性设置为Text1 ,Index 属性设置为0 ,这样我们就创建了一个TextBox 控件数组,其中有一个成员。

(2)在窗体上放置一个命令按钮Command1 ,在其Click 事件中添加如下的代码:LoadText1(1)Text1(1).left=0Text1(1).visible=true(3)在窗体上放置一个命令按钮Command2 ,在其Click 事件中添加如下的代码:Unload Text1(1)(4)运行。

单击命令按钮Command1 ,窗体上会出现一个新的文本框;单击命令按钮Command2 ,窗体上刚出现的新的文本框就被删除。

vb中如何动态添加删除控件

vb中如何动态添加删除控件

vb中如何动态添加删除控件用Controls.Remove(控件) 动态删除控件。

注意:在VB中只能动态删除那些动态添加的控件;不允许删除在窗体设计器上布置的控件!示例如下:(1)创建一个VB工程(2)在Form1上布置两个Command(3)窗体代码Option Explicit' 声明要被动态添加/删除的控件Dim x As Label'-----------------------------' 动态添加一个Label控件'-----------------------------Private Sub Command1_Click()If x Is Nothing ThenSet x = Controls.Add("bel", "label1")x.Move 150, 150x.AutoSize = Truex.Caption = "这个是动态添加的标签" x.Visible = TrueEnd IfEnd Sub'-----------------' 动态删除控件'-----------------Private Sub Command2_Click()If x Is Nothing Then Exit Sub Controls.Remove xSet x = NothingEnd SubPrivate Sub Form_Load() Command1.Caption = "添加控件" Command2.Caption = "删除控件" End Sub(4)运行窗体启动点击“添加控件”按钮点击“删除控件”按钮。

在VB.NET中实现动态增加控件

在VB.NET中实现动态增加控件

在VB.NET中实现动态增加控件作者:李清霞冯向科邓莹来源:《消费导刊·理论版》2007年第06期[摘要]当用户对记录表进行排序时,记录表的长度往往是不固定的;如果每一个TextBox 控件显示一条记录,则这样的TextBox的数目也是不确定的。

对于Windows窗体中的绝大多数控件来说,它们是在系统绘制窗体的同时一起被绘制了,因此它们不能被动态增加。

通过手工增加控件的方式,我们可以在窗体的任何位置添加任意大小、任意数量的任意控件,从而实现动态增加控件的效果。

[关键词]控件窗体类对象继承属性一、前言对于Windows窗体中的绝大多数控件来说,它们是随着窗体一起出现的。

例如:当Windows XP进入使用界面后,“开始”按钮就出现在整个屏幕的左下角,除非用户重新设置,否则每次都是一个按钮出现在屏幕左下角。

但也有这样的情况:在实现和用户交互工作时,系统最初可能并不清楚整个屏幕或窗体中究竟有多少个控件,具体数目取决于用户的输入值。

在这种情况下,把控件和窗体一起绘出是不可能的,这就要求程序员先绘好窗体,然后根据和用户交互工作的结果,实现在窗体中动态地绘出所需的各种控件。

一般说来,要在窗体中增加一个控件,主要完成三个方面的工作:控件的声明、控件的装载和控件的显示。

控件的声明包括用继承的方法声明控件,创建控件的实例对象等;控件的装载工作指添加控件作为母窗体的控件对象;控件的显示工作包括控制控件在窗体出现的位置、大小、显示文本和索引号等相关内容。

下面分别就三个方面进行介绍,(一)控件的声明在Microsoft Visual Basic .NET环境中,类的概念是一个非常重要的内容,在其上运行的类模块、窗体、各种控件对象等都作为一个类来处理,它们的区别已经不存在了,几乎所有的程序都是由类组成的,它们被按照不同的功能分在不同的功能类库里。

在这一点上,它和Visual Basic 6.0及其前期版本有很大区别。

VB中动态控件及事件的添加

VB中动态控件及事件的添加
Private Sub Command1_Click()
Set cmd = Controls.Add("mandbutton", "cmd1")
cmd.Visible = True
End Sub
Private Sub cmd_click() '动态按钮事件
MsgBox ""
End Sub
关键字说明varname是一个用来响应由activex对象触发的事件的对象变量
VB怎么给动态的按扭添加事件啊
1》
Private Sub Command1_Click()
Dim command As CommandButton
Set CommandButton = Controls.Add("mandButton", "Cmd")
With form1!
.Visible = True
.Width = 1000
.Height = 1000
.Top = 500
.Left = 500
End With
怎么给CMD控件加事件啊
建一个Command1。
===================
DimWithEventscmd As CommandButton'这一句特别重要
With CommandButton
.Left = 100
.Top = 100
.Width = 2000
.Height = 375
.Caption = Time
.Visible = True
End With
End Sub
2》
form1.Controls.Add("VB.textbox", "text1")
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB中动态创建控件VB相关技术:/s/blog_5ccce2820100lof8.html创建数据驱动窗体所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。

举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。

要做到这一点就得利用VB动态添加控件的功能。

动态创建控件无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时动态地创建控件。

你可以通过控件数组做到这一点,但VB6的Controls集合所提供的Add 方法,功能更强大,灵活性更高。

使用该方法,你不需要在设计时将控件的实例放在窗体上。

实际上,用Add方法你甚至可以创建程序在编译时根本不存在的控件。

这种方法的用法也很简单:' 声明一个窗体级的变量Dim WithEvents txtTotal As TextBoxSub CreateTextbox()' 创建新的Textbox控件Set txtTotal = Controls.Add("VB.TextBox", "txtTotal")' 将控件移动到你所需要的地方txtTotal.Move 1000, 800, 1200, 300' 创建时,所有的控件都是不可见的txtTotal.Visible = TrueEnd Sub请注意Add方法的第二个参数:分配给控件的名称。

从代码可读性出发,这个名称一般都与变量名相同。

你可以用这个名称从Controls集合中获取相应的控件或移除该控件。

例如:Controls.Remove "txtTotal"在变量声明时加上WithEvents关键字,即使在设计时窗体不存在该控件,你也可以为该控件的事件编写代码。

上面所讲的方法只适合解决VB内置的控件。

例如,当你要添加一个TreeView控件时,VB会要求你证明你已经得到了合法的授权来创建该控件的实例。

换句话说,VB要证明这个控件是买来的,而不是从其它附有该控件的程序中借来的。

要证明你经过了合法的授权有下面几种方法:在窗体上放置一个控件。

这也是最简单的方法。

你完全没有必要将这个窗体显示出来。

将相关的控件添加到工具箱中,然后在“工程属性”对话框的“生成”标签页中取消选择“删除有关未使用的ActiveX控件的信息”这一项。

向Licenses集合添加一个元素。

例如:Debug.PrintLicenses.Add("MSMask.MaskedEdBox")仅仅创建了控件并不足够要创建一个数据驱动窗体,仅仅知道动态创建控件还不够。

例如:现在你要创建一个能根据数据库中表的不同字段自动生成控件的窗体。

该窗体可能会创建单行文本框,其长度随字段长度不同而不同;也可能会创建单选按钮或复选按钮以显示布尔型字段;甚至可能创建一个多行文本框显示备注型字段。

你需要解决的第一个问题是:文本框控件的Multiline属性在运行时是只读的,只在设计时可用。

幸好,微软的Microsoft Windowless Controls 6.0可以解决这个问题。

这组控件集包括了轻量级的TextBox,ComboBox,ListBox,CheckBox,OptionButton,CommandButton和两个scrollbar控件。

这些控件与VB内置的相应的控件最大的区别在于:这些控件的所有属性在运行时是可读写的。

在VB的安装光盘中的Common\Tools\VB\WinLess文件夹中可以找到这个控件组。

用下面的代码可以创建一个多行文本框:Dim WithEvents txtEditor As MSWLess.WLTextPrivate Sub CreateEditor()Set txtEditor = Controls.Add( "MSWLess.WLText", "txtEditor") txtEditor.Move 0, 0, 4000, 4000txtEditor.MultiLine = TruetxtEditor.ScrollBars = wlBothtxtEditor.Visible = TrueEnd Sub另外一个问题比较复杂:在事先不知道要创建多少个控件的情况下,如何给每个对新创建的控件的引用分配唯一的带WithEvents关键字的变量。

换句话说就是要对新创建的控件的事件进行编程,前提是你在设计时不知道程序会创建多少个控件。

使用对象数组显然不行,因为不能用WithEvents关键字声明一个对象数组;更坏的情况是,资一个变量定义为As Control或As Object也不行,因为还是不能用WithEvents。

问题源自于我们无法在运行时捕获一个对象数组事件。

所以我们只能采取曲线救国的办法。

所要的编写的代码可能比你想象的多,不过这个解决方法很有趣,值得我们这样去做。

我们需要两个辅助类模块来捕获事件,分别取名为ControlItems和ControlItem。

ControlItems是一个集合类,其中保存了ControlItem对象及其数量。

该数量等于你所要对之编程的控件的数量。

ControlItem类的每一份实例捕获控件产生的事件,然后调用在其所属的ControlItems集合类中的过程,最后由ControlItems在窗体中触发事件并执行事件中的代码。

整个过程如下图所示:捕获多个控件的事件为简单起见,假设你要捕获来自所有的动态添加到窗体上去的控件的Validate 事件。

为完成这个工作,ControlItems集合类必须向父窗体展示该事件,并随时准备接收来自其子ControlItem类的通知以触发事件。

代码如下:Event Validate(CtrlItem As ControlItem, Cancel As Boolean)Private m_ControlItems As New Collection' 向集合中添加一个新的ControlItem项目Function Add(ctrl As Control) As ControlItemDim newItem As New ControlItemnewItem.Init ctrl, Me' 添加到私有类m_ControlItems.Add newItem' 返回新项目给调用者Set Add = newItemEnd FunctionFriend Sub Notify_Validate(Item As ControlItem, Cancel As Boolean) RaiseEvent Validate(Item, Cancel)End SubControlItem类必须捕获来自动态添加到窗体中的控件的事件,并通知其所属的ControlItems集合类。

很显然,ControlItem类必须有一个用WithEvents关键字定义的变量来引用真正的控件。

这意味着你不能将变量声明为As Control或As Object。

如果你决定在窗体中所动态添加的控件不使用VB内置的控件的话,这个问题的解决办法相当的简单。

你只需要将变量声明为VBControlExtender类型就行了。

对于创建数据驱动窗体来讲,不使用VB内置的控件并不是一件大不了的事。

将变量声明为VBControlExtender,并加上WithEvents关键字,你就能直接捕获Validate,GotFocus,LostFocus,DragDrop和DragOver这几个事件了。

如果要捕获其它更多的事件,你可以使用ObjectEvent。

下面是ControlItem类模块中的代码:Public WithEvents Ctrl As VBControlExtender' 所属的ControlItems对象Dim m_Parent As ControlItemsSub Init(ctl As Object, parnt As ControlItems)Set Ctrl = ctlSet m_Parent = parntEnd SubPrivate Sub Ctrl_Validate(Cancel As Boolean)' 通知所属的ControlItems类m_Parent.Notify_Validate Me, CancelEnd Sub将下面的代码放入窗体中,就可以捕获动态添加的控件所产生的事件了:Dim WithEvents CtrlItems As New ControlItemsPrivate Sub cmdCreateControls_Click()Dim ctrl As Control' 创建两个文本框并将它们添加到ControlItems集合? Set ctrl = Controls.Add("MSWLess.WLText", "One")ctrl.Move 100, 200, 1000, 300ctrl.Visible = TrueCtrlItems.Add ctrl' 注意你可以使用同一个变量Set ctrl = Controls.Add("MSWLess.WLText", "Two")ctrl.Move 100, 800, 1000, 300ctrl.Visible = TrueCtrlItems.Add ctrlEnd SubPrivate Sub CtrlItems_Validate( CtrlItem As ControlItem, Cancel As Boolean)' 拒绝空字符串 - 注意如何引用控件的属? If CtrlItem.Ctrl.Text = "" Then Cancel=TrueEnd Sub现在解决了最困难的部分,要创建一个数据驱动窗体就变得简单了******************************************************************************************************************************动态添加控件VB6有一个新功能,可以动态添加控件,不用控件数组:object.Add (ProgID, name, container)参数说明Object 必需的。

相关文档
最新文档