vb.net2008执行模块中动态添加控件程序并执行相关事件——陷入混乱中,请高人指点,高分求教,长标题求点击~~~

zzc0012 2012-11-20 03:40:40


Module Module1
Dim WithEvents Tb1 As New Label
Dim i As Integer
Public Sub creat1() '动态添加控件过程
Tb1.BorderStyle = BorderStyle.Fixed3D
Dim labelname As Boolean
labelname = printyl.ControlCollection.Equals(Tb1.Name, Tb1.Name)

If labelname = True Then
i = i + 1
Tb1.Location = New System.Drawing.Point(100 + i, 100 + i)
Tb1.Name = "ttss" + CStr(i)
Tb1.Text = "ttss" + CStr(i)
End If
Tb1.Size = New System.Drawing.Size(200, 100)
printyl.Controls.Add(Tb1)

End Sub
Dim ss As Boolean
Dim mov As Point
Private Sub Tb1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Tb1.MouseMove
If ss = True Then
Dim a, b As Integer
a = mov.X - e.X
b = mov.Y - e.Y
Tb1.Location = New Point(Tb1.Location.X - a, Tb1.Location.Y - b)

ElseIf ss = False Then
Tb1.Location = New Point(Tb1.Location.X, Tb1.Location.Y)
End If
End Sub
Private Sub Tb1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Tb1.MouseDown
ss = True
mov = New Point(e.X, e.Y)
End Sub
Private Sub Tb1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Tb1.MouseUp
ss = False
End Sub



以上是在模块1中编写的代码,在form1中Button1_Click时用call creat1()执行调用。希望得到的结果是,在form1中点击button1后动态添加一个label,并执行下面的事件,事件得到的效果就是当label添加完成后,用鼠标点住label时,可以在控件内拖动,当松开鼠标时,label停在当前位置。

目前用以上代码,可以实现这个功能(但没有完全达到想要的效果)。

问题是,目前每点击一次button1,生成一个新的label,上一个label就消失了。我用for next 对label的name 进行了计数。希望的效果是每点一次button1 都会增加一个新的label,但上一次新增的label不消失(例:label1、label2、label3....),并且都可以执行下面的事情。
不知道是那个地方弄错了,实在不会写,麻烦指导~~

另外当把 Dim Tb1 as New label 写在 Public Sub creat1() 里面时,可以得到上面label累积出现的效果(例:label1、label2、label3....),但是这样出现的所有label又都不能执行下面的事件,用了 AddHandler XX.MouseMove, AddressOf XX_MouseMove 这个也不行,不知道是不是没用对。

总之现在的效果就是两者只能实现一种,要么累积出现label,但都不能执行事件,要么出一个新label,上一个消失,但可以执行事件。
...全文
111 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzc6913 2012-11-20
  • 打赏
  • 举报
回复


Module Module1
    'Dim WithEvents Tb1 As New Label
    Dim tblGroup() As Label
    Dim i As Integer
    Public Sub creat1() '动态添加控件过程
        Dim Tb1 As New Label
        Tb1.BorderStyle = BorderStyle.Fixed3D
        Dim labelname As Boolean
        labelname = printyl.ControlCollection.Equals(Tb1.Name, Tb1.Name)

        If labelname = True Then
            i = i + 1
            Tb1.Location = New System.Drawing.Point(100 + i, 100 + i)
            Tb1.Name = "ttss" + CStr(i)
            Tb1.Text = "ttss" + CStr(i)
        End If
        Tb1.Size = New System.Drawing.Size(200, 100)
        printyl.Controls.Add(Tb1)

        AddHandler Tb1.MouseMove, AddressOf Tb1_MouseMove
        AddHandler Tb1.MouseDown, AddressOf Tb1_MouseDown
        AddHandler Tb1.MouseUp, AddressOf Tb1_MouseUp
        ReDim Preserve tblGroup(i)
        tblGroup(i) = Tb1
    End Sub
    Dim ss As Boolean
    Dim mov As Point
    Private Sub Tb1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) ' Handles sender.MouseMove
        If ss = True Then
            Dim a, b As Integer
            a = mov.X - e.X
            b = mov.Y - e.Y
            sender.Location = New Point(sender.Location.X - a, sender.Location.Y - b)

        ElseIf ss = False Then
            sender.Location = New Point(sender.Location.X, sender.Location.Y)
        End If
    End Sub
    Private Sub Tb1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) 'Handles sender.MouseDown
        ss = True
        mov = New Point(e.X, e.Y)
    End Sub
    Private Sub Tb1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) 'Handles sender.MouseUp
        ss = False
    End Sub

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧