vb 控件属性 数组解决办法
- 格式:pdf
- 大小:63.73 KB
- 文档页数:3
vb控件数组的使用VB控件数组是在Visual Basic开发环境中用于处理大量相似控件的一种技术。
通过创建控件数组,可以方便地对一组控件进行集成处理,从而提高代码效率。
下面将详细介绍控件数组的使用及其注意事项。
1、控件数组的声明与初始化在VB中,声明控件数组与普通变量的方法类似。
通过使用Dim语句,在程序代码中声明一个控件数组,例如:Dim myButton(10) as CommandButton这里创建了10个命令按钮的数组,可以直接操作数组元素,如:myButton(0).Caption="Button1"myButton(1).Caption="Button2"当然,你也可以使用For循环结构来初始化数组中的控件,如下所示:For i = 0 To 10Set myButton(i) = Controls.Add("mandButton", "Button" & i)myButton(i).Top = i * 25Next i上述代码使用For循环在窗体上添加了11个按钮,并将它们的Top 属性依次设置为0、25、50、75……。
2、控件数组的处理方法通过使用控件数组,可以对具有相同事件处理程序的一组控件进行集成处理。
比如,你可以使用For循环结构为这些控件注册事件,代码如下:For i = 0 To 10Set myButton(i) = Controls.Add("mandButton", "Button" & i)myButton(i).Top = i * 25AddHandler myButton(i).Click, AddressOf Buttons_ClickNext iPrivate Sub Buttons_Click()MsgBox "Clicked"End Sub这里,我们将11个按钮的Click事件都绑定到Buttons_Click事件处理程序,当任何一个按钮被单击时,都会产生一个被处理的事件。
vb net控件数组处理方法
, 控件数组, 处理方法, 简单实用
控件数组的处理方法By: LaiCQ____-4-28 16:30:27VB6有控件数组,这个是很方便的,可以将所有同类型的控件组成一个数组,方便处理,但却没有.网上找了很多方法,都不实用,现在采用如下方法可以解决问题:
方法为:采用Tag来标识各个控件
例如:
1: 加入控件:btnMain_0, btnMain_1, btnMain_2, 其Tag:分别设置为:0, 1, 2 2: 建立一个函数如下, 其可以响应不同的Button事件,这样将所有事件列在一起分别处理就不会乱了.
‘Main窗体:按钮Button的单击处理
Private Sub btnMain_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
btnMain_0.Click, btnMain_1.Click, btnMain_2.ClickDim iInde_ As IntegerOn Error GoTo SolveErriInde_ = CInt(CType(sender, Button).Tag) Select Case iInde_
Case 0 ‘按键0的处理
Case 1 ‘按键1的处理
Case 2 ‘按键2的处理
End Se
lectE_it Sub
SolveErr:
End Sub
3: 对其它类型的控件处理是一样的,只要修改:CType(sender, Button)中的Button, 如下拉列表框为:iInde_ = CInt(CType(sender, ComboBo_).Tag)。
1、*************************************************Visual Studio 2010中添加注册控件的方法在VC6.0中添加ADO Data Control等控件是很很方便的,"Project" --> "Add to Project" --> "Components and Controls" 中打开"Components and Controls Gallery" 对话框,双击"Registered ActiveX Controls" 目录就能找到这两个控件。
也就是说VC 6.0下是默认注册了这两个控件的(一般情况应该装完VC 6.0就有了),直接拿来用就OK。
但是在Visual Studio2010中不会自带这些控件,因此要先注册才能添加,下面以ADO Data Control控件为例,说明添加方法:1.先检查C:\WINDOWS\system32目录下有没有MSADODC.ocx这个文件(Visual Studio 2010不自带,因此,多半是没有的),没有就去下载;这是我下载的,如果有更高的版本也行/source/31985302.在VS 2010中注册MSADODC.ocx控件。
在VS 2010中点击"Tools(工具)" --> "Visual Studio Command Prompt(Visual Studio命令提示)",在出现的窗口中输入如下命令回车即可:regsvr32 msadodc.ocx3.在“工具箱”里右击,单击“选择项”,在出现的对话框中选择“COM组件”选项卡,选中“Microsoft ADO Data Control,version 6.0(OLEDB)”,点击确定,在工具箱里就会出现这个控件了,需要用的时候就可以添加ADO Data Control控件了。
VB控件数组的操作技巧控件数组有在设计时设置好的,也有在运行中创建的。
控件数组一方面使得程序简洁、令代码易于维护,另一方面能使程序具有灵活性。
可见,科学地利用控件数组可使编程工作的效率更高。
本文是从笔者回答网友的问题中整理出来的,与原来的回答相比略有改动。
希望这些"技巧"对大家有些帮助。
如有不妥之处,敬请指教。
一、运行中设置数组控件的属性设窗体上有若干个以 Command1 命名的命令按钮,现要求:点击其中一个按钮后,该按钮不可用,而其它的按钮均可用。
以下几行代码可以实现这个要求,比一个一个的设置高效得多。
Private Sub Command1_Click(Index As Integer)Dim i As Integer '计数器Dim comNum As Integer '按钮的索引号comNum = 0For i = 0 To Command1.Count - 1comNum = comNum + 1If comNum > Command1.Count - 1 Then comNum = 0Command1(comNum).Enabled = True '让所有按钮可用NextCommand1(Index).Enabled = False '让被单击按钮不可用End Sub二、运行中添加和卸载数组控件窗体上已有一个文本框Text1,程序需要在运行时动态地创建若干文本框,可这样实现:1.首先,设计时给Text1的Index属性设置为"0",这一步很重要:有了索引号才能创建数组控件;2.编写代码:[之前请给工程添加两个命令按钮,Name属性取缺省值,Caption属性分别为:添加、卸载]Private Sub Command1_Click()Dim txtNum As Integer 'Text1的Index号Dim Num As Integer '赋给各TextBox的值txtNum = 0 '初值Num = 1 '初值Text1(0).Text = "Text" & Num '第一个Text1的值Dim i As Integer '计数器For i = 0 To 4 '添加五个TextBoxtxtNum = txtNum + 1Num = Num + 1Load Text1(txtNum) '加载文本框Text1(txtNum).Top = Text1(txtNum - 1).Top + 450 '设置位置Text1(txtNum).Text = "Text" & Num '加载内容Text1(txtNum).Visible = True '令其可见:不能漏NextCommand1.Enabled = FalseCommand2.Enabled = TrueEnd SubPrivate Sub Command2_Click()Dim i As Integer, N As IntegerN = 0For i = 1 To Text1.Count - 1N = N + 1Unload Text1(N)NextCommand1.Enabled = TrueCommand2.Enabled = FalseEnd Sub三、给运行中添加的数组控件命名并编写事件其实例二已经给数组控件命了名,只是简单了些。
实验五数组一、控件属性的设置 (滚动条)1、在名称为Forml的窗体上添加一个名称为H1水平滚动条,请在属性窗口中设置它的属性值,满足下列要求:它的最小刻度值为1,最大刻度值为100,在程序运行时鼠标单击滚动条上滚动框以外的区域(不包括两边按钮),滚动框移动10个刻度。
再在滚动条下面画两个名称分别为L1、L2的标签,并分别显示1、100,运行时的窗体如图5-1所示。
工程文件名保存为sy5-1.vbp,窗体文件名为sy5-1.frm。
2、在名称为Form1的窗体上添加一个名称为HS1的水平滚动条,其刻度值范围为1 -100;添加一个命令按钮,名称为C1,标题为"移动滚动框"。
请编写适当的事件过程,使得在程序运行时,每单击命令按钮一次(假定单击次数不多于10次),滚动框向右移动10个刻度。
程序运行时的窗体如图5-2所示。
要求程序中不得使用变量,事件过程中只能写一条语句。
工程文件名保存为sy5-2.vbp,窗体文件名保存为sy5-2.frm。
3、在名称为Form1的窗体上画一个图片框,其名称为Picture1、一个水平滚动条,名称为HScroll1,和一个命令按钮,名称为Command1,标题为"设置属性",通过属性窗口在图片框中装入一个图形(文件名为pic1.jpg,位于考生目录下),图片框的高度与图形的高度相同,图片框的宽度任意(如图1所示)。
编写适当的事件过程,程序运行后,如果单击命令按钮,则设置水平滚动条的如下属性:Min 100Max 1500LargeChange 100SmallChange 10之后就可以通过移动滚动条上的滚动块来放大或缩小图片框。
程序运行后的窗体如图5-3所示。
要求程序中不得使用任何变量。
工程文件名为sy5-3.vbp,窗体文件名为sy5-3.frm。
4、在控件属性1文件夹下有一个工程文件sy5-4.vbp,窗体上有一个圆和一个矩形,还有水平和垂直滚动条各一个。
VB ListView控件属性、方法、事件常用属性:View设置或返回控件的视图类型值说明1-LvwIcon 图标类型2-LvwSmallIcon 小图标类型3-LvwList 列表类型4-LvwReport 报表类型Arrange 设置后返回控件的图标排列方式(在图标视图下有效)值说明1-LvwNone 不排列2-LvwAutoLeft 自动靠右排列3-LvwAutoTop 自动靠左排列Icons、SmallIcons、ColumnHeaderIcons属性Icons指定图标视图时的图标与ImageList的绑定SmallIcons、ColumnHeaderIcons指定列表视图时的图标与ImageList 的绑定PICTURE、PictureAlignment属性分别指定ListView控件的背景图片和布局方式ListItems(Index) 属性ListItems 属性是ListView控件中列表项的集合。
Index用于指定列表项集合中的一个对象,我们可以把这个对象看作对一行的引用ListItems集合的属性1. Text 设置或返回显示文本2. key 关键字3. index 索引编号4. icon , smallicon 不同视图时显示单元格的图标5. checked 给checkboxes 打√6. selected 使处于选定状态7. ListSubitems(index)集合我们可以把这个集合看作对这行中单元格的引用Text 设置或返回单元格显示的内容Reporticon 设置单元格的图标8.Subitems(index) 设置或返回单元格文本== ListSubitems (index).textColumnHeaders(index) 属性ColumnHeaders 属性是ListView控件中列标头的集合1. text 显示标题文本2. key3. index4. icon 指定标题图标5. alignment 指定index列的对齐方式(注意:第一列也就是列表项不能指定)6. position 返回当前列的索引7. subitemindex 返回指定列的listsubitem索引TextBackgroud 属性决定text的背景是透明还是ListView的背景色值0 lvwTransparent 透明1 lvw 不透明(用listview的背景色)Ghosted 属性logic决定是否虚状HideColumnHeaders 属性隐藏表头LabelWrap 属性标签转行rgeIcon 或View.SmallIcon 时才使用该属性FullRowSelect整行显示HotTracking热点追踪鼠标指针自动调整为手型HoverSelection 属性自动聚焦鼠标指针自动调整为手型AllowColumnReorder属性值设置.t.时,用户可以用鼠标选中1列拖至其他地方进行重新排列Sorted属性当值为.t.时,列表按字母排序常用方法:ListItems.add(index,key,text,icon,smallicon)向listitems添加一列表项。
使用控件数组(VB6高级编程)(福哥录入)控件数组是一组具有共同名称和类型,且事件过程也相同的控件。
一个控件数组至少应有一个元素,元素数目可在系统资源和内存允许的范围内增加;数组的大小也取决于每个控件所需的内存和windows 资源。
在控件数组中可用的最大索引值为32767。
同一控件数组中的元素有自己的属性设置值。
常见的控件数组包括实现菜单控件和选项按钮分组。
在设计时,使用控件数组添加控件所消耗的资源比直接向窗体添加多个相同类型的控件所消耗的资源要少。
当希望若干控件共享代码时,控件数组也很有用。
例如,如果创建了一个包含三个选项按钮的控件数组,则无论单击那个按钮时都将执行相同的代码。
若要在运行时创建新控件,则新控件必须是控件数组的成员。
使用控件数组时,每个新成员继承数组的共享事件过程。
没有控件数组机制是不可能在运行时创建新控件的,因为全新控件不具有任何事件过程。
控件数组解决了这个问题,因为每个新控件都继承为数组编写好的事件过程。
例如,如果窗体上有若干文本框,而且每个文本框都接受一个日期数值,则可创建一个控件数组,使所有文本框共享一个合法性检查代码。
1、设计时创建控件数组设计时有三种方法创建控件数组:(1)将相同名字赋予多个控件。
(2)复制现有的控件并将其粘贴到窗体上。
(3)将控件的Index 属性设置为非Null数值。
可以通过改变控件名称添加控件数组元素,步骤如下所示:(1)绘制控件数组中要添加的控件(必须为同一类型的控件)。
决定哪一个控件作为数组中的第一个元素。
(2)选定控件并将其Name 设置值变成数组第一个元素的Name 设置值。
(3)在数组中为控件输入现有的名称时,VisualBasic 将显示一个对话框,要求确认是否要创建控件数组。
此时选择“确定”按钮确认操作。
例如,若控件数组第一个元素名称为cmdCtlArr,则选择一个CommandButton将其添加到数组中,并将其名称设置为cmdCtlArr,此时,将显示这样一段信息:“已经存在名为‘cmdCtlArr’的控件。
Vb 属性接口数组解决办法
前不久制作Activex 控件,自定义接口成员,本来想通过外界传递数组给控件,但是我没有找到设置接口成员属性为数组的方法(我是个VB初学者,直到目前也没有找到方法)。
后来发现vb中字符串长度可以存放多达2亿个字符。
想到了将数组转换为字符串然后用字符串转换为数组的方法。
整体思路:在控件外接程序中将数组生成字符串,在控件里面将得到的字符串转换为数组完成数组的传递。
举例详细代码如下宿主程序中按钮Command1单击触发以下函数运行:第一个For 循环生成x(0 to 50),y(0 to 50)两个数组。
a,b为两个字符串,其第一个字符(数字形式)存放数组元素数目一共从0到50,有51个元素。
Str()指令是将数字转换为字符数字,比如将51转换为“51”。
第二个For循环将a,b两个字符串不断的添加字符(数字转换为字符形式,采用&连接,中间用逗号隔开)。
从而a,b字符串分别是“51,0,1,2,3……,50”和“51,627.5 578.5 531.5 486.5……627.5”
控件的名称为ctr,为其设置了三个属性接口sn(布尔型) snx(字符串)sny(字符串)。
其中snx,sny分别用于承接外界传递的字符串,Sn为某个位(与该主题无关,在控件中指示另外某个事件的)Private Sub Command1_Click()
Dim cd As Integer
Dim x() As Double
Dim y() As Double
cd = 50
ReDim x(cd)
ReDim y(cd)
For i = 0 To cd Step 1
x(i) = i
y(i) = (i - 25) ^ 2 + 2.5
Next i
Dim a As String
Dim b As String
a = Str(cd + 1)
b = Str(cd + 1)
For i = 0 To cd Step 1
a = a & "," & Str(x(i))
b = b & "," & Str(y(i)) Next i
ctr.sn = True
ctr.snx = a
ctr.sny = b
End Sub
控件中程序字符串处理代码Private Sub zhunhuan()
Dim xa() As Double
Dim ya() As Double
Dim af2() As String
Dim af3() As String
af2 = Split(m_snx, ",")
af3 = Split(m_sny, ",")
Dim cd As Integer
cd = Int(Val(af2(0))) ReDim ya(cd - 1)
ReDim xa(cd - 1)
For i = 0 To (cd - 1) Step 1 xa(i) = Val(af2(i + 1)) Next i
For i = 0 To (cd - 1) Step 1
ya(i) = Val(af3(i + 1))
Next i
End Sub
上述代码split函数将字符串剥离成一个数组从而af2(),af3()中存放字符即af3()中af3(0)为“51” af3(1)为“627.5” af3(2)为“578.5”For循环中Val(af3(i + 1))将af3(i + 1)中元素由字符转换为数字即af3(1)由“627.5”变换成为627.5 从而完成了整个数组由宿主程序往控件的传递。
附:程序前面自动生成的属性代码(即在属性设置完成向导生成的代码)
Const m_def_snx = "0"
Const m_def_sny = "0"
Const m_def_sn = 0
'属性变量:
Dim m_snx As String
Dim m_sny As String
Dim m_sn As Boolean
附:程序后面生成的属性代码(应该分别有三对get,let函数以及InitProperties(),ReadProperties(PropBag As PropertyBag) ,WriteProperties(PropBag As PropertyBag)等函数因为只有下面的函数要做添加代码,其它的几个都原封不动不做修改)。
所作的修改也仅仅是在PropertyChanged "sny"后面添加了一句Call zhuanhuan也就是宿主程序中ctr.sn = True ctr.snx = a ctr.sny = b依次传递完三个属性后在最后一个属性传递完后启动zhuanhuan函数。
Public Property Let sny(ByVal New_sny As String)
m_sny = New_sny
PropertyChanged "sny"
Call zhuanhuan
End Property
作为一个初学者仅仅提出自己在项目中一个问题的解决办法,供大家讨论参考。