CSDN首页 | 新闻聚焦 | 共享软件 | 俱乐部 | 开发文档 | 专家门诊 | 招聘求职 | Linux园地 | 程序员杂志
--------------------------------------------------------------------------------
我要回复 | 我感兴趣 | 打印贴子 | 推荐给朋友 | 关闭窗口
主 题:我在程序中动态加的用户控件和直接拖到FORM上的控件的事件和属性怎么不一样,动态加的只出来两个属性,而直接拖到FORM上的都有。
作 者:chenbaijun
所属论坛:Visual Basic
问题点数:88
回复次数:8
发表时间:2001-12-30 9:42:25
回复贴子:
回复人: ljren_t(立志) (2001-12-30 9:43:57) 得0分
你怎么动态加的?
回复人: zgjchina1(还俗和尚.COM) (2001-12-30 9:48:20) 得0分
你使用的方法有问题吧?!
我没遇到过这样的问题!
回复人: chenbaijun(常客) (2001-12-30 10:59:54) 得0分
controls.add("工程名.类名","控件名称").我是这样加的.
回复人: seaskyweb(程序员) (2001-12-30 11:08:09) 得0分
用数组 load sss(i) 等等。
回复人: chenbaijun(常客) (2001-12-30 11:09:52) 得0分
怎么用?能说具体点吗?
回复人: seaskyweb(程序员) (2001-12-30 11:10:12) 得0分
应该没问题?
回复人: seaskyweb(程序员) (2001-12-30 11:16:01) 得0分
如果你想动态地增加控件,必须在设计阶段将控件放入Form,但可以将Visible属性设为False,将控件的Index属性设为0(即设置为控件数组)。然后在运行时使用Load方法加入控件。如下面这段代码:
Private Sub btnAdd_Click()
Static n As Integer
If n <>0 Then Load Label1(n)
Label1(n).Move 300, 200 + n *500
Label1(n).Visible = True
n = n + 1
End Sub
这段代码表示,当用户每按一次按钮时添加一个Label控制。
使用Unload可以动态删除控件数组中的控件。
在VB 6.0中,可以实现你的愿望,因为Form.Controls集合包括了Add方法、Remove方法。例如:
Option Explicit
Private WithEvents btnObj As CommandButton
Private Sub btnObj_Click()
MsgBox "这是动态添加的按钮。"
End Sub
Private Sub Form_Load()
Set btnObj = Controls.Add("VB.CommandButton", "btnObj")
With btnObj
.Visible = True
.Width = 2000
.Caption = "Hello"
.Top = 1000
.Left = 1000
End With
End Sub
这里使用WithEvent指定动态添加的控件的事件。 , 另 一 种 办 法 是 可 以 借 助 VBControlExtender来 实 现 这 种 效 果 。 下 面 是 一 个 例 子 :
Option Explicit ' 如 果 你 要 添 加 一 个 在 你 的 工 程 文 件 中 ' 没 有 用 到 的 ActiveX控 件 , 你 需 要 声 明 它 为 ' VBControlExtender. Dim WithEvents ctlDynamic As VBControlExtender Dim WithEvents ctlText As VB.TextBox Dim WithEvents ctlCommand As VB.CommandButton Private Sub ctlCommand_Click() ctlText.Text = "你 点 击 了 命 令 按 钮 " End Sub Private Sub ctlDynamic_ObjectEvent(Info As EventInfo) ' 测 试 TreeView控 件 的 Click事 件 If Info.Name = "Click" Then ctlText.Text = "你 点 击 了 " _ & ctlDynamic.object.selecteditem.Text End If End Sub Private Sub Form_Load() Dim i As Integer ' 添 加 TreeView的 许 可 信 息 license集 合 ' 如 果 license集 合 已 经 包 括 了 许 可 信 息 , ' 你 将 得 到 运 行 错 误 732 Licenses.Add "MSComctlLib.TreeCtrl" ' 动 态 增 加 TreeView控 件 到 窗 体 。 ' 如 果 你 希 望 增 加 控 件 到 其 它 的 容 器 , ' 如 Frame或 PictureBox, 你 可 以 使 用 ' Controls.Add的 第 3个 参 数 指 定 容 器 程 序 。 Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", _ "myctl", Form1) ' 设 置 控 制 的 位 置 和 大 小 ctlDynamic.Move 1, 1, 2500, 3500 ' 添 加 一 些 节 点 到 TreeView控 件 For i = 1 To 10 ctlDynamic.object.nodes.Add Key:="Test" & Str(i), Text:="Test" _ & Str(i) ctlDynamic.object.nodes.Add Relative:="Test" & Str(i), _ Relationship:=4, Text:="TestChild" & Str(i) Next i ' 显 示 控 件 ctlDynamic.Visible = True ' 添 加 textbox Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1) ' 设 置 textbox的 位 置 和 大 小 ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _ 1, 2500, 100 ' 改 变 背 景 色 ctlText.BackColor = vbYellow ' 显 示 控 件 ctlText.Visible = True ' 添 加 按 钮 Set ctlCommand = Controls.Add("VB.CommandButton", _ "ctlCommand1", Form1) ' 设 置 CommandButton的 位 置 和 大 小 ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _ ctlText.Height + 50, 1500, 500 ' 设 置 标 题 ctlCommand.Caption = "Click Me" ' 显 示 控 件 ctlCommand.Visible = True End Sub
回复人: ljren_t(立志) (2001-12-30 11:17:02) 得0分
是不是定义了一个带event的VBControlExtender对象x.
用set x=controls.add("工程名.类名","控件名称").
这时x应该有好多属性的,大部分是通用属性,其中x.ojbect属性带有你的正常情况这个控件的属性.可以在MSDN上查VBControlExtender的用法.
Set DepartmentCtrlEdit = UserControl.Controls.Add("KX_DepartmentCtl.Department", "DepartmentCtrlEdit", Me)
SetParentEx DepartmentCtrlEdit.object.hwnd, UserControl.hwnd With DepartmentCtrlEdit
.Top = 600
.Left = 600
.ZOrder 0
End With
DepartmentCtrlEdit.object.InitializeControl
DepartmentCtrlEdit.Visible = True
DepartmentCtrlEdit.object.DoActionEx tmpDepartment
UserControl.Enabled = False
--------------------------------------------------------------------------------
我要回复:(请您对您的言行负责,遵守中华人民共和国有关法律、法规,尊重网上道德)
返回问题 | 关闭窗口
美达美简介 广告服务 英语步步高 程序员大本营 百联美达美科技有限公司 版权所有
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货