vb的控件数据

通过限制焦点验证控件数据
Validate事件和CausesValidation属性是在允许用户将焦点移开控件之前,串联使用以确认对控件的输入的。例如:假设有几个文本框和一个Help按钮的应用程序,当每个文本框接收焦点时,您想在文本框的特殊验证准则被满足之前阻止用户移动焦点;然而,您也想允许用户在任何时候都能单击Help按钮。 要做到这点,在Validate事件中设置验证准则,并将Help按钮的CausesValidation属性设置为False。假如属性设置为True(缺省设置),Validate事件将在第一个控件上发生。假如属性设置为False,在第一个控件上的Validate事件将抢先发生。
Validate事件比LostFocus事件更适合验证数据输入项,因为LostFocus事件(按照定义)是在焦点已移动后发生。相反,通过使用Validate事件,您能防止焦点移动到另一个控件直到验证规则被满足。
可能的使用
数据输入项应用程序需要执行比Masked Edit控件所提供的或在业务规则中发生的有效性验证更复杂的数据输入项有效性验证。
窗体需要防止用户使用TAB键或加速键将控件移走,直到数据已被输入到字段中。
在Internet Explorer中运行的ActiveX文档需要一种方法,使用户在脚本程序化地移动焦点之前完成在窗体上的操作。

在Validate事件上控制焦点
Validate事件包括一个keepfocus参数。当参数设置为True时,控件将保留焦点。这样做有效地防止了用户单击其它控件。

使用控件数组
控件数组是一组具有共同名称和类型的控件。它们的事件过程也相同。一个控件数组至少应有一个元素,元素数目可在系统资源和内存允许的范围内增加;数组的大小也取决于每个控件所需的内存和Windows资源。在控件数组中可用到的最大索引值为 32767。同一控件数组中的元素有自己的属性设置值。常见的控件数组的用处包括实现菜单控件和选项按钮分组。
注意Visual Basic包括了在运行时动态地将未引用的控件添加到Controls集合中的能力。本主题仅指在设计时通过将一个控件剪切和粘贴到窗体上添加的引用控件。有关在运行时添加控件的详细信息,请参阅参考主题“Add 方法(Controls 集合)”和“Add方法(Licenses 集合)”。

为何使用控件数组
在设计时,使用控件数组添加控件所消耗的资源比直接向窗体添加多个相同类型的控件消耗的资源要少。当希望若干控件共享代码时,控件数组也很有用。例如,如果创建了一个包含三个选项按钮的控件数组,则无论单击哪个按钮时都将执行相同的代码。
若要在运行时创建一个控件的新实例,则新控件必须是控件数组的成员。使用控件数组时,每个新成员继承数组的公共事件过程。
使用控件数组机制是不可能在运行时创建新控件的,因为每个新控件都继承为数组编写好的事件过程。例如,如果窗体上有若干文本框,而且每个文本框都接受一个日期数值,则可创建一个控件数组,使所有文本框共享同一个合法性检查代码。

示例应用程序:Calc.vbp
图 7.2 所示的Calculator示例应用程序(列在Samples!Alink("vbsamples")目录中)包含两个控件数组——数字按钮和操作按钮。

请注意示例是如何使用object(index)语法引用每个控件的。在创建控件时指定索引值。实际上,在设计时为一个控件指定任意的索引,这将使控件成为数组的一部分。
Index属性区分控件数组中的元素。当数组中的一个控件识别了一个事件时,Visual Basic将调用公共事件过程并传递一个参数(Index属性的值),分辨是哪个控件识别事件。
例如,Number_Click事件过程的第一行代码是这样的:
Private Sub Number_Click (Index As Integer)
如果Number(0)识别事件,则Visual Basic将0作为index参数传递,而如果Number(1)识别事件,则Visual Basic将1作为index参数传递。与索引值不同,对于Number(0)到Number(9)已执行的其余Number_Click代码都是相同的。

设计时创建控件数组
设计时有三种方法创建控件数组:
1.将相同名字赋予多个控件。
2.复制现有的控件并将其粘贴到窗体上。
3.将控件的Index属性设置为非 Null 数值。
注意 必须在“菜单编辑器”中创建菜单控件数组。关于此项操作的详细信息,请参阅第六章,“创建用户界面”中的“运行时创建和修改菜单”。
要通过改变控件名称添加控件数组元素:
1. 绘制控件数组中要添加的控件(必须为同一类型的控件)决定哪一个控件作为数组中的第一个元素。
2. 选定控件并将其Name设置值变成数组第一个元素的 Name 设置值。
3. 在数组中为控件输入现有名称时,Visual Basic 将显示一个对话框,要求确认是否要创建控件数组。此时选择“确定”确认操作。
例如,若控件数组第一个元素名为cmdCtlArr,则选择一个CommandButton将其添加到数组中,并将其名称设置为 cmdCtlArr,此时将显示这样一段信息:“已经存在名为 'cmdCtlArr'的控件。是否要创建控件数组?”。选择“确定”确认操作。
用这种方法添加的控件仅仅共享Name属性和控件类型;其它属性与最初绘制控件时的值相同。
要通过复制现存控件添加控件数组元素:
1. 绘制控件数组中的控件。
2. 当控件获得焦点时,选择“编辑”菜单中的“复制”命令。
3. 在“编辑”菜单中,选择“粘贴”命令。Visual Basic将显示一个对话框询问是否确认创建控件数组。选择“确定”确认操作。指定给控件的索引值为1。绘制的第一个控件具有索引值0。
每个新数组元素的索引值与其添加到控件数组中的次序相同。这样添加控件时,大多数可视属性,例如高度、宽度和颜色,将从数组中第一个控件复制到新控件中。

运行时添加控件数组
在运行时,可用Load和Unload语句添加和删除控件数组中的控件,然而,添加的控件必须是现有控件数组的元素。必须在设计时创建一个(在大多数情况下)Index 属性为0的控件,然后在运行时使用如下语法:

加载控件数组的新元素时,大多数属性设置值将由数组中具有最小下标的现有元素复制——本例中是索引值为0的元素。因为不会自动把Visible、Index和TabIndex属性设置值复制到控件数组的新元素中,所以,为了使新添加的控件可见,必须将其 Visible属性设置为True。
注意 试图对数组中已存在的索引值使用Load语句时,Visual Basic将生成一个错误。
重点 可用Unload语句删除所有由Load语句创建的控件,然而,Unload无法删除设计时创建的控件,无论它们是否是控件数组的一部分。

控件方案:在控件数组中添加和删除控件
如何在运行时添加和删除控件,控件数组示例对此作了演示,这里,控件是选项按钮。根据这个示例,用户可以添加选项按钮,改变图片框背景颜色。
如图7.3 所示,启动窗体,然后在上面绘制一个图片框、一个标签、两个选项按钮和三个命令按钮。

列表控件">

控件数组应用程序的事件
接着,必须添加选项按钮和命令按钮的事件过程。添加窗体声明后启动应用程序:
Dim MaxId As Integer
所有选项按钮共享Click事件过程:
Private Sub optButton_Click (Index As Integer)
picDisplay.BackColor = QBColor(Index + 1)
End Sub
通过“添加”命令按钮的Click事件过程添加新的选项按钮。本例中,在执行 Load 语句前,代码将检查确认加载的选项按钮数不超过十个。加载控件之后,必须将其 Visible 属性设置为True。
Private Sub cmdAdd_Click ()
If MaxId = 0 Then MaxId = 1 '设置全部选项按钮。
If MaxId > 8 Then Exit Sub '只允许十个按钮。
MaxId = MaxId + 1 '按钮计数递增。
Load optButton(MaxId) '创建新按钮。
optButton(0).SetFocus '重置按钮选项。
'将新按钮放置在上一个按钮下方。
optButton(MaxId).Top = optButton(MaxId - 1)._
Top + 400
optButton(MaxId).Visible = True '显示新按钮。
optButton(MaxId).Caption = "Option" & MaxId + 1
End Sub
通过“删除”命令按钮的Click事件过程删除选项按钮:
Private Sub cmdDelete_Click ()
If MaxId <= 1 Then Exit Sub '保留最初的两个按钮。
Unload optButton(MaxId) '删除最后的按钮。
MaxId = MaxId - 1 '按钮计数递减。
optButton(0).SetFocus '重置按钮选项。
End Sub
通过“关闭”按钮的Click事件过程结束应用程序:
Private Sub cmdClose_Click ()
Unload Me
End Sub

时间: 2024-12-31 08:57:51

vb的控件数据的相关文章

vb-关于VB MSCHART控件画柱状折线图的求助

问题描述 关于VB MSCHART控件画柱状折线图的求助 各位大神,小弟求教如何使用VB 中MSCHART控件画出柱状折线图. 例:柱状显示每月实际销量,折线显示销售目标 解决方案 http://wenku.baidu.com/link?url=4dnfuHhQFd_o4Ms3Mybj_C87iVPKPPuz3TAsNVuhQ2q73fnNoFepsKD1ke3Sb2n_e4C2BNW67uwa7aAwGRsArAL_hsVNwyl3lI9VtGdIwGa http://www.docin.co

轻松调整VB.NET控件

控件 轻松调整VB.NET控件 作者: BUILDER.COMWednesday, March 5 2003 10:48 AM Visual Basic .NET使得放置和调整控件的工作比在Visual Basic 6中要容易得多.大多数System.Windows.Forms命名空间里的可视控件是由Control类继承下来的,它可以实现两种属性:Anchor和Dock. Anchor属性可以被设定为Top,Bottom,Left和Right的任何组合.默认设置是Top,Left.这可以保持控件

vb.net 控件backgroundcolor为半透明时,如何让其它控件也半透明显示?

问题描述 vb.net 控件backgroundcolor为半透明时,如何让其它控件也半透明显示? Label1.BackColor = Color.FromArgb(100 0 0 0) 这样做以后只让窗体的背景图片半透明显示了,而其它控件却被遮盖了.(图片为窗体背景)怎么让控件也半透明地显示出来? 解决方案 http://blog.csdn.net/sxycgxj/article/details/6114798http://download.csdn.net/download/zenas/1

刷新显示-QT QTableView控件 数据写入实时刷新

问题描述 QT QTableView控件 数据写入实时刷新 背景:QT编程,QTableView控件做数据库的显示 QTableView是这样创建的(tableView是QTableView创建的对象): QStandardItemModel *model; model=new QStandardItemModel(); ui->tableView->setModel(model); 向tableView里面写数据是使用model->setItem():来对tableView表里面的每一

VB OCX控件的名字和程序的关系

问题描述 VB OCX控件的名字和程序的关系 VB中添加控件对话中会有一个控件的名字,这个名字是放在什么地方的,能不能隐藏起来? 解决方案 这个描述信息是放在ocx控件中的,可以用 exescope 这个工具修改掉. 解决方案二: OCX控件了解

关于VB.net控件随窗体自动变化的CODE的问题?大侠请进,多谢了。

问题描述 在网上搜索了VB6窗体中控件自动随窗体变化大小(源码)的列子,这段代码是很专业的模块,但是将它放入VB.net中确不行了,提示FormName不是集合类型?我虽然知道可以用DOCK,ANCHOR等属性来调整相应的控件,但是这段代码确真的很有用处,想弄懂它,为什么FormName不是集合类型,会出现这样的错误呢?需要将它改成什么呢?请查看代码(标红色字体为出错代码)ModuleModule1PrivateFormOldWidthAsLong'保存窗体的原始宽度PrivateFormOld

vb.net控件、web service简述

web|控件   在新建vb.net工程时有下面几个选项: 类库:一组没有GUI的类库,类似于java中的bean.一些公用模块写入类库,在项目中使用是个不错的方法. 可以在windows app 或 web app 或更多的项目中使用. 只须在引用中加入对应类库的dll,即可以引用名,类名的方式引用.如果类库中有namespace则要在 开始先imports这个namespace.调用时也可以只用类名. windows控件库:为window app建立的控件,具有GUI. 使用时,在左边工具栏

定制VB.NET控件编程拦截击键动作

一.简介 首先,本文假定你已经熟悉VB.net和Visual Studio.NET Windows表单设计器. 在开发定制Windows表单控件时,提供我们自己的下拉框类型编辑器来操作控件的属性常常是非常方便的.定制的类型编辑器不仅可以提供更为丰富的设计时刻体验,而且可能成为用户是否喜欢你的控件的决定因素. 如果你决定创建你自己的下拉式类型编辑器,那么它应该遵循与内置的下拉框类型编辑器相类似的模式.让我们以Anchor属性为例.一种典型的操作该属性的设计时刻用户交互描述如下: · 用户选择属性格

vb.net控件随窗口大小调整

问题描述 '===窗体控件自适应大小2016-7-3===PrivateyuanH,yuanWPrivateyHWAsSingle(,)PrivateSubFormTest_Load(senderAsObject,eAsEventArgs)HandlesMe.LoadyuanH=Me.HeightyuanW=Me.WidthDimctlAsControl'窗体控件变量ReDimyHW(Me.Controls.Count,3)DimjAsInteger=-1ForEachctlInMe.Contr