如何vb中动态添加控件

比如,在程序运行时,我想在窗体或者picturebox中动态添加多个textbox控件,在每次点击右键时出现不同的textbox,如果textbox中没有内容,则在失去焦点时就自动卸载。。。愁啊……各位大侠请伸出您无私的爱之手来援助下吧……不胜感激
各位大哥提供的答案在form中均可用,我原来也是这么做的
但是现在要改到frame或者picturebox下,不管用了
还请诸位在帮个忙……

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

VB.CommandButton。在ProgID
与对象浏览器中所显示的不一样的情况下,Visual
Basic
将显示一个包括正确
ProgId
的错误信息。
name
必要的。一个字符串,用来标识集合的成员。
container
可选的。一个对象引用,它指定控件的容器。如果没有指定或为NULL,缺省值为
Controls
集合所属的容器。通过指定该参数,可以把一个控件放置在任何现存的容器控件(如
Frame
控件)中。用户控件或
ActiveX
文档也可以作为一个容器。
举例:
//在picture1上面添加一个commandbutton
Private
Sub
Form_Load()
Form1.Controls.Add
"VB.CommandButton",
"cmdOk",
Picture1
With
Form1.cmdOk
.Visible
=
True
.Width
=
500
.Caption
=
"确认(&Y)"
End
With
End
Sub
当然,我个人觉得更好的办法还是用控件数组,例如现在首先建立一个TextBox控件,并把Index属性改成0(注意,原来是空的,必须写上0)。
然后在程序中任意地方,采用例如Load
TextBox1(1)就可以创建一个新的TextBox对象,通过TextBox1(1)访问。
当然你可以用循环创建指定数量的文本框,在不用的时候记得用
Unload
TextBox1(1)给他注销掉。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-03-23
我先声明一下窗体:
首先窗体必须有一个textbox,并且制作成数组(把它的Index属性设成0),然后隐藏它(把它的Visible属性设成False)。
假设TextBox 的 名称 是 txtArray

请看代码,我作了注释:
'--------------------
Dim i As Integer '这个是全局变量,写在声明区
'--------------------
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Buttton = 2 Then
i=i+1
Load txtArray(i) '加载新控件
With txtArray(i) '开始模块化的控制新控件
.Top = txtArray(i-1).Top+50+txtArray(i-1).Height
'纵向设置新控件位置,你也可以自己控制。
.Visible = True
End With
End If
End Sub

Private Sub txtArray_LostFocus(Index As Integer)
'控件丢失焦点时
If txtArray(Index).Text = "" Then '文本框一个字也没写,好懒呀……
Unload txtArray(Index) '卸载
i=i-1
End Sub
'我的不是最好的,但我可以做得更好
第2个回答  推荐于2017-11-27
Dim i As Integer

Private Sub Form_Load()
i = 1
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 2 Then
Load Text1(i)
Text1(i).Top = Text1(i).Top + Text1(i).Height * i
Text1(i).Visible = True
End If
i = i + 1

End Sub

Private Sub Text1_LostFocus(Index As Integer)
If Text1(Index).Text = "" Then Unload Text1(Index)
End Sub

=======很好用啊。是不是你自己糊涂 没更换事件 在框架里就改成以下的

Dim i As Integer

Private Sub Form_Load()
i = 1
End Sub

Private Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 2 Then
Load Text1(i)
Text1(i).Top = Text1(i).Top + Text1(i).Height * i
Text1(i).Visible = True
End If
i = i + 1

End Sub

Private Sub Text1_LostFocus(Index As Integer)
If Text1(Index).Text = "" Then Unload Text1(Index)
End Sub本回答被提问者采纳
第3个回答  2009-03-23
先在form上加两个Command按钮。Command1的Caption为添加控件;Command2的Caption为删除控件。

加入下面代码

Option Explicit
Private WithEvents newbutton As CommandButton
'通过使用WithEvents关键字声明一个对象变量为新的命令按钮

'----------添加按钮------------
Private Sub Command1_Click()
If newbutton Is Nothing Then
Set newbutton = Controls.Add("vb.commandbutton", "cmdnew", Form1)
newbutton.Move Command1.Left + Command1.Width + 240, Command1.Top

newbutton.Caption = "动态添加的按钮"
newbutton.Visible = True
End If
End Sub

Private Sub Command2_Click()
If newbutton Is Nothing Then
Exit Sub
Else
Controls.Remove newbutton
Set newbutton = Nothing
End If
End Sub

Private Sub newbutton_click()
MsgBox "单击“删除控件”按钮删除它", vbDefaultButton1, "click"
End Sub

至于你说的功能,用这个稍微改一下就可以了

vb中如何动态添加控件数组? 我现在已经用controls.add添加了一个控件...
Private Sub Command1_Click()CreateTextbox End Sub Private Sub Command2_Click()Set txtTotal(1) = Controls.Add("VB.TextBox", "txtTotal1")txtTotal(1).Move 3000, 800, 1200, 300 txtTotal(1).Visible = True End Sub 这样算不算 像设计放置控件的方法一好像不能实现 ...

在VB中如何动态创建控件??
Set oCtrl = Controls.Add("VB.CommandButton", "Button1")With oCtrl .Caption = "不会响应事件的按钮".Width = 2000 .Left = 100 .Top = 200 .Visible = True '控件加载后默认为不可见,故此步骤至关重要!End With End Sub Private Sub LoadControlWithEvents()Set MyBtn = Controls.Add...

vb动态添加image控件!
方法一:向在窗体上添加一个image1控件,在属性窗口中将其Index属性设置为0(就是定义一个图像框控件数组),然后用下面代码:Private Sub Command1_Click()Load Image1(1)With Image1(1).Stretch = True .Picture = Image1(0).Top = 100 .Left = 100 .Visible = True End With Load Image1...

如何在VB动态创建Image控件,每点一下按钮,弹出一个Image?
可以用Controls.add方法来动态新增,如:'\/\/ 新增一个控件 Set objNew = Me.Controls.add("VB.Image", "名称")Set objNew.Container = Picture1 With objNew .Left = 10 .Top = 10 .Stretch = False .Picture = LoadPicture("图片路径").Visible = True End With ...

VB动态加载控件方法
'添加两个控件: Command1 Command2 '在属性窗口将 Command2 改名为 CmdZu,并设置 Index 属性为 0 Private Sub Command1_Click()'控件组有多个成员,卸载之 If CmdZu.Count > 1 Then '卸载控件 CmdZu 1-5,0不能卸载,因为是设计时添加的 For I = 1 To 5 Unload CmdZu(I)Next Exit ...

VB6.0中,如何动态添加控件至指定的PictureBox控件中?
开始的一个元素的调用方法为 Cmd1(0).属性 其中()内的为操作元素的下标。只要Load对应的数组元素。即可完成元素的载入,载入成功后可以当做一个普通控件来操作。此时如果需要添加多个,请使用For循环+Load语句实现 For i=1 to 20 Load Cmd(i)Cmd(i).visible=ture ...next i ...

vb如何在运行过程中动态的创建按钮,标签,文本框等对象?
添加动态按钮,及关联按钮事件的方法如下 --- ' 声明对象 Dim newButton As New System.Windows.Forms.Button ' 预设对象 With newButton .Name = [按钮控件名称].Text = [按钮显示内容].Location = New Point([x位置], [y位置]).Size = New System.Drawing.Size([控件宽], [控件高]).Fla...

vb 动态创建 vsflexgrid 控件
从视图菜单中打开对象浏览器,找到该控件,下面说明面板中指出了它所在的库,这是链接,点击一下定位到该库,在说明面板中有Libray 库名。建立控件时把这个库名也加进去。Controls.add 的第三个参数就是指容器,一般控件都有Container属性,动态建立后把容器控件赋给该属性也是可以的。

vb中怎么添加控件?
1、首先打开VB6.0,选择“标准EXE”。2、然后按下键盘上的“Ctrl+T”来选择部件。3、在其中找到“Microsoft Multimedia Control 6.0”选项。4、点击左侧的小框框来选中。5、点击对话框下部的确定按钮来完成添加。6、此时,工具箱内就会出现小部件。7、点击小部件,然后在窗体中画出小部件。8、画完...

如何动态添加VB控件。比如在窗体中动态添加Picturebox控件。
先在窗体设计过程中手工增加一个picture1,index属性设定为0 程序中要增加一个控件,就用:Load Picture1(i) 'i为索引号,1-n 最好顺序递增 Picture1(i).Visible = True '这句非常重要,否则新增的图片框看不到 Picture1(i).Move x, y, w, h '设定图片框的坐标和大小 ...

相似回答