如何vb中动态添加控件
比如,在程序运行时,我想在窗体或者picturebox中动态添加多个textbox控件,在每次点击右键时出现不同的textbox,如果textbox中没有内容,则在失去焦...
比如,在程序运行时,我想在窗体或者picturebox中动态添加多个textbox控件,在每次点击右键时出现不同的textbox,如果textbox中没有内容,则在失去焦点时就自动卸载。。。愁啊……各位大侠请伸出您无私的爱之手来援助下吧……不胜感激
各位大哥提供的答案在form中均可用,我原来也是这么做的
但是现在要改到frame或者picturebox下,不管用了
还请诸位在帮个忙…… 展开
各位大哥提供的答案在form中均可用,我原来也是这么做的
但是现在要改到frame或者picturebox下,不管用了
还请诸位在帮个忙…… 展开
4个回答
展开全部
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)给他注销掉。
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)给他注销掉。
展开全部
我先声明一下窗体:
首先窗体必须有一个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
'我的不是最好的,但我可以做得更好
首先窗体必须有一个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
'我的不是最好的,但我可以做得更好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先在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
至于你说的功能,用这个稍微改一下就可以了
加入下面代码
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
至于你说的功能,用这个稍微改一下就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询