如何vb中动态添加控件

比如,在程序运行时,我想在窗体或者picturebox中动态添加多个textbox控件,在每次点击右键时出现不同的textbox,如果textbox中没有内容,则在失去焦... 比如,在程序运行时,我想在窗体或者picturebox中动态添加多个textbox控件,在每次点击右键时出现不同的textbox,如果textbox中没有内容,则在失去焦点时就自动卸载。。。愁啊……各位大侠请伸出您无私的爱之手来援助下吧……不胜感激
各位大哥提供的答案在form中均可用,我原来也是这么做的
但是现在要改到frame或者picturebox下,不管用了
还请诸位在帮个忙……
展开
 我来答
从燎归思菱
2019-07-03 · TA获得超过3805个赞
知道大有可为答主
回答量:3063
采纳率:34%
帮助的人:178万
展开全部
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)给他注销掉。
百度网友dd3335d
2009-03-23 · TA获得超过216个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:60.6万
展开全部
我先声明一下窗体:
首先窗体必须有一个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
'我的不是最好的,但我可以做得更好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mosquitokobe
推荐于2017-11-27 · TA获得超过4253个赞
知道大有可为答主
回答量:5008
采纳率:50%
帮助的人:0
展开全部
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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
andyzhou502
2009-03-23
知道答主
回答量:54
采纳率:0%
帮助的人:26.5万
展开全部
先在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

至于你说的功能,用这个稍微改一下就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式