none
VB2008关于控件数组的问题 RRS feed

  • 问题

  • 在窗体上有N个相同控件,比如label,现在的想法是当鼠标移动至label时,其前景色变成红色,离开时前景色变成黑色。如果是在VB6中,可以建立一个控件数组,在MouseMove和MouseLeave(这个需要自己写,呵呵)中用 Label1(Index).ForeColor = RGB(255, 0, 0)来实现。那么在VB2008中该怎么实现呢?
    如果控件数量少,比如有三个label,可以这样通过下面的子程序实现:
    Private Sub Labels_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove, Label2.MouseMove, Label3.MouseMove
      Select Case DirectCast(sender, Label).Name
      Case Label1.Name
      Label1.ForeColor = Color.Red 
      Case Label2.Name
      Label2.ForeColor = Color.Red
      Case Label3.Name
      Label3.ForeColor = Color.Red
      End Select
      End Sub

    可如果有三十个label控件需要判断,难道要写到label30.MouseMove?
    还有一个问题就是就算写成上面的子程序,似乎也和一个一个分开(Label1_MouseMove、Label2_MouseMove.....)写没什么本质的区别啊?
    PS:上面源程序,仅为了举例,主要就是想知道Sub怎么定义。
    2011年5月3日 14:02

答案

  • 你好

    或者你可以嘗試以下的Code

     

    在FORM_LOAD EVENT 加入

    For i as Int32 = 1 To 30

      Dim lbl As Label = CType(Me.Controls("Label" & i), TextBox)

      AddHandler lbl.MouseMove, AddressOf Labels_MouseMove

    Next

    Private Sub Labels_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    Dim lbl As Label = sender

    lbl .ForeColor = Color.Red 

      End Sub

    Please correct me if my concept is wrong

     


    Chi
    2011年5月3日 14:19
    版主