我一次能生成这样的button 5个 10个 甚至100个,难道为每个button都写吗?能不能用类?或者其他方法?
解决方案 »
- 如何选择meshflexgrid中多行数据并将选择的数据进行收藏?
- 怎么实现WMP中的控件与工具箱中的有些空间相连?
- 能实现吗?
- 不能保存啊!请各位看看!!谢谢!
- 用SQL和VB开发的软件能脱离SQL环境吗?
- 请问哪位大哥知道点击VB中TextBoBox控件右端的小按钮是触发什么事件?
- 请教循环显示问题!
- 超难的内外循环,两层嵌套循环,堪比哥德巴赫猜想!!!!!求帮忙!!!!
- API函数ShowWindow(hWnd, nCmdShow)如何用?原始定义为BOOL型,在用ShowWindow为long型 ?
- 有个小问题:如何可以在treeview和listvuew之间加个分隔条,可以自由拉动?
- VB中怎样实现Internet功能?
- 用vb做了一个组件,编译,注册都没问题,但在asp中使用时老是报错:“未设置对象变量或 With block 变量”,请问是怎么回事?请有组件开发经验的大虾指点!!!!
Private Sub Command1_MouseDown(Index As Integer, Button, x ...(后面的我就不说了)
If Button = 2 Then UnLoad Command1(Index)
End Sub
为何使用控件数组
在设计时,使用控件数组添加控件所消耗的资源比直接向窗体添加多个相同类型的控件消耗的资源要少。当希望若干控件共享代码时,控件数组也很有用。例如,如果创建了一个包含三个选项按钮的控件数组,则无论单击哪个按钮时都将执行相同的代码。若要在运行时创建一个控件的新实例,则新控件必须是控件数组的成员。使用控件数组时,每个新成员继承数组的公共事件过程。使用控件数组机制是不可能在运行时创建新控件的,因为每个新控件都继承为数组编写好的事件过程。例如,如果窗体上有若干文本框,而且每个文本框都接受一个日期数值,则可创建一个控件数组,使所有文本框共享同一个合法性检查代码。
*************************************************如果我通过cmdObject.index=i-1
将会出现错误 只读属性无法更改!我建议大家动手试一试,此问题对于实现动态程序结构很有用处!该程序完成后,无论是结构还是界面都跟数据库提供的数据相关!这还不够有用吗?有人建议通过类的继承和实例来完成,我对于这些实在不拿手!希望大家共同讨论!
因为在设计时有了这个控件,所以可以创建该控件的事件过程。你可以用楼上的说法写代码了。别的办法,以后再说。(其实动态创建过程也是可以的)
就按照你上面的程序来说吧。实际上,你这段程序,如果你在cmdObject_Click事件过程中写代码的话,你只能在按cmdOne5的时候,能引发这个过程。因为在你创建的循环中,最后一个set语句,把cmdObject指向了这个按钮,因此只有你按了这个按钮才能引发这个事件过程。看到这里你应该能明白我说的笨办法了:
你只需要声明5个(你的例子中产生了5个)类似cmdObject的对象,然后为每一个cmdObject编写cmdObject_Click事件过程。
Private WithEvents cmdObject As CommandButton
Private WithEvents cmdObject2 As CommandButton
Private WithEvents cmdObject3 As CommandButton
Private WithEvents cmdObject4 As CommandButton
Private WithEvents cmdObject5 As CommandButtonPrivate Sub cmdObject_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) common_click Button, 1
End SubPrivate Sub cmdObject2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) common_click Button, 2
End SubPrivate Sub cmdObject3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) common_click Button, 3
End SubPrivate Sub cmdObject4_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) common_click Button, 4
End SubPrivate Sub cmdObject5_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) common_click Button, 5
End SubPrivate Sub common_click(ByVal btn As Integer, ByVal index As Integer)
If btn = vbRightButton Then
Form1.Controls.Remove "cmdOne" & index
End IfEnd Sub
Private Sub form_load()
Dim i As Integer
For i = 1 To 5
Set cmdObject = Form1.Controls.Add("vb.commandbutton", "cmdOne" & i)
cmdObject.Top = i * 500
cmdObject.Visible = True
cmdObject.Caption = cmdObject.Name
Next i
Set cmdObject = Form1.Controls("cmdOne1")
Set cmdObject2 = Form1.Controls("cmdOne2")
Set cmdObject3 = Form1.Controls("cmdOne3")
Set cmdObject4 = Form1.Controls("cmdOne4")
Set cmdObject5 = Form1.Controls("cmdOne5")
End Sub