VB中动态创建控件

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
创建数据驱动窗体

所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。要做到这一点就得利用VB动态添加控件的功能。

动态创建控件

无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时动态地创建控件。你可以通过控件数组做到这一点,但VB6的Controls集合所提供的Add方法,功能更强大,灵活性更高。使用该方法,你不需要在设计时将控件的实例放在窗体上。实际上,用Add方法你甚至可以创建程序在编译时根本不存在的控件。这种方法的用法也很简单:

' 声明一个窗体级的变量
Dim WithEvents txtTotal As TextBox

Sub CreateTextbox()
   ' 创建新的Textbox控件
   Set txtTotal = Controls.Add("VB.TextBox", "txtTotal")
   ' 将控件移动到你所需要的地方
   txtTotal.Move 1000, 800, 1200, 300
   ' 创建时,所有的控件都是不可见的
   txtTotal.Visible = True
End Sub
请注意Add方法的第二个参数:分配给控件的名称。从代码可读性出发,这个名称一般都与变量名相同。你可以用这个名称从Controls集合中获取相应的控件或移除该控件。例如:

Controls.Remove "txtTotal"

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

上面所讲的方法只适合解决VB内置的控件。例如,当你要添加一个TreeView控件时,VB会要求你证明你已经得到了合法的授权来创建该控件的实例。换句话说,VB要证明这个控件是买来的,而不是从其它附有该控件的程序中借来的。

要证明你经过了合法的授权有下面几种方法:

在窗体上放置一个控件。这也是最简单的方法。你完全没有必要将这个窗体显示出来。
将相关的控件添加到工具箱中,然后在“工程属性”对话框的“生成”标签页中取消选择“删除有关未使用的ActiveX控件的信息”这一项。
向Licenses集合添加一个元素。例如:Debug.Print Licenses.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.WLText

P
IPOS EXCEL 导入 报错 run-time error ‘91‘ object variable or with block variable not set”,怎么处理 【问】:用IPOS系统excel表格导入的时候,弹出错误提示:“run-time error '91' object variable or with block variable not set”,怎么处理? 【答】:这个是因为你安装office2007版,默认打开了一些插件开关,而安装文件没有自带这些插件程序。所以导致打开错误。其实这些插件开关,你都用不到,都关闭就可以了。 关闭方法: 打开你的excel2007,随便打开1个。 点击左上角的“文件” ↓ 找到“选项” ↓. 阅读详情

相关推荐

20100910 学习记录:VB6.0 Error: run-time error '91' object variable or with block variable not set...

vb6.0对我来说就是噩梦..... (┬_┬)经理不知又从哪里弄出来的vb程序,让我修改... 我这个头晕....完全没有信心的研究了一下,最后居然真地搞定了.... (┬_┬) 内牛~事实证明,很多时候,没什么是做不到的,只是你想不想做,肯不肯去做的问题。 回过头说一下这个问题。网上查找了一下,一般说这个问题的产生是没有声明对象没有new我检查了一下,我的是有声明的,但是debug就一直说...

weixin_34293911的博客 772

VB窗体动态创建控件控件事件

VB窗体动态创建较少,今天,试着弄一个,专为解答之用。 首先创建一个空白窗体,调整大小,修改名称,双击窗体进入代码编辑界面: Public Class VB解答专用窗体 Dim 数据列表 As DataGridView Dim 输入框 As TextBox Private Sub VB解答专用窗体_Load(sender As Object, e As EventAr...

浤济的专栏 4826

LabVIEW使用Excel 2007时错误

用程序打开Excel时,报错信息如下: Run-time error 91“”: Object variable or with block variable not set 原因是在打开Excel时,加载了2003版本的样式。 去除方法: 打开Microsoft Office 2007 建议设置, 去掉使用Office03样式经典菜单,

学习笔记 3365

vb动态创建控件

vb动态创建控件 2009-05-17 15:52 创建数据驱动窗体         所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。要做到这一点就得利用

whchensir的专栏 5266

vb.net 教程 3-13 动态创建控件2

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 上一节讲了设计时创建控件,实际设计时候可以很方便地选择创建控件的事件代码, 本节讲一下不使用withevents,如何在运行时创建一个带有事件的控件。 主要用到 AddHandler 语句: AddHandler event, AddressOf eventhandler event :要处理的事件的名称。 eventhandler :将处理事件的过程的名称。 这里需要强调一下,event

chinaherolts2008的博客 630

vb.net 教程 3-13 动态创建控件3

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 在vb6的时候,很方便在设计的时候创建控件数组。 例如两个按钮控件(CommandButton),当修改其中一个控件名称与另外一个控件名称一样时,vb6编辑器会提示: 按下“是”就会创建控件数组了,两个按钮区别在于Index属性不同: 在实际代码中可以看到,事件参数中多了 Index as Integer,也就是通过Index指明了是哪个具体的按钮: 那么在vb.net中,如果输入了相同的名称:

chinaherolts2008的博客 771

动态创建和删除VB控件

摘要:介绍在Visual Basic环境中利用动态创建和删除控件的方法,比较了两者异同,阐述了在实际应用中,Active X控件在程序运行时动态加载和删除的方法。关键词:Visual Basic 6.0;控件控件集合;控件数组;属性;Active X1.概述在使用Visual Basic 进行程序设计的过程中,如果能在运行时刻动态地创建和删除控件,可以极大地丰富界面的处理和变化。

QQ348191658的专栏 1530

VB6 动态创建用户控件

<br />VB6有一个新功能,可以动态添加控件,不用控件数组:<br /><br />object.Add (ProgID, name, container)<br />====================================<br />参数说明:<br />Object 必需的。一个对象表达式,其值是“应用于”列表中的一个对象。 <br />ProgID 必需的。一个标识控件的字符串。大多数控件的 ProgID 都可通过查看对象浏览器来决定。控件的 ProgID 是由控件的库和类组成的。

lbuskeep的专栏 7197

VB 动态创建ActiveX控件详解

熟悉VB的朋友对使用ActiveX控件一定不会陌生,众多控件极大地方便了编程,但唯一的缺陷是不能动态加载控件,必须在设计时通过引用,将控件放置在窗体上。VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功能,由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语句中用 New 关键字、CreateObject 或 GetObject 从部件外面将对

xcntime的专栏 5180

VB动态创建控件

Dim WithEvents MyBtn As CommandButton Set MyBtn = Controls.Add("VB.CommandButton", "Button1") With MyBtn .Caption = "我可以响应事件!" .Width = 1800 .Left = 100 .Top = 700 .Visible

鞠勇鸿的技术专栏 1862

vb.net 教程 3-13 动态创建控件1

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 前面介绍的都是通过拖拽或者双击工具箱中的控件后,在窗体上创建控件。 如果不采用以上方法是不是就不能创建和使用控件呢? 肯定可以在代码中创建的。 基本步骤 1、定义一个窗体级别的变量,类型为需要的控件类型。 如果还要使用该控件的事件,请使用以下语句: Dim WithEvents 变量 As 控件类 例如: Dim WithEvents mybutton As Butto..

chinaherolts2008的博客 1180
上一篇: Excel、Access、VB的结合应用
yzmml
博客等级 码龄21年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值