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
  
--------------------------------------------------------------------------------
 
我要回复:(请您对您的言行负责,遵守中华人民共和国有关法律、法规,尊重网上道德)   
返回问题 | 关闭窗口   
   
 
           
美达美简介 广告服务 英语步步高 程序员大本营 百联美达美科技有限公司  版权所有