如何在运行时重命名标签名称是否可能?在vb.net中

时间:2015-02-28 13:48:08

标签: vb.net

我使用标签1标签75是否可以更改标签名称?示例而不是label7我想将标签名称重命名为label3,解决方案是什么?

4 个答案:

答案 0 :(得分:1)

它在表单中工作,因为你正在调用Controls,这意味着Me.Controls,它是我(你的表单)内部的控件集合。将标签放在面板中后,标签不再位于窗体的控件集合中,而是面板的控件集合中。这是因为Controls不会比调用它的控件更深。你可以做到这一点,这将解决你当前的问题:

' replace Panel1 with the name of your panel
Dim lbl As Label = Panel1.Controls("Label" & Data)
ReceivedFrame = ReceivedFrame + 1
lbl.Text = ReceivedFrame

但如果标签移出面板,则会中断。下面的解决方案在处理能力方面要贵一些,但我在任何地方都使用它,这不是一个问题。

在项目中创建一个新的类文件,并将此代码放入其中。

Public Module Support

    <Extension()> _
    Public Function ChildControls(Of T As Control)(ByVal parent As Control) As List(Of T)
        Dim result As New List(Of Control)
        For Each ctrl As Control In parent.Controls
            If TypeOf ctrl Is T Then result.Add(ctrl)
            result.AddRange(ctrl.ChildControls(Of T)())
        Next
        Return result.ToArray().Select(Of T)(Function(arg1) CType(arg1, T)).ToList()
    End Function

    <Extension()> _
    Public Function ControlByName(ByVal parent As Control, ByVal name As String) As Control
        For Each c As Control In parent.ChildControls
            If c.Name = name Then
                Return c
            End If
        Next
        Return Nothing
    End Function

End Module

它使您可以获得控件内的所有控件,包括表单。然后按名称获得所需的控件。

然后你可以这样称呼它:

Dim lbl As Label = Me.ControlByName("Label" & Data)
ReceivedFrame = ReceivedFrame + 1
lbl.Text = ReceivedFrame

只要控件位于表单中的某个位置,任何容器中或其他容器中的任何容器中,这都可以正常工作。

答案 1 :(得分:0)

Dim lbl As New Label
lbl.Parent = Panel1
lbl.Text = "Your string"

答案 2 :(得分:0)

您可以直接通过Label Control的Name Property调用它可以驻留在表单上的内容。如果Label Control位于面板上且其名称为 Label1 ,则要显示一个值,您可以通过编程方式将其称为 Label1.Text =“您的字符串值”

如果要通过对象访问Label Control的属性,那么

Dim lbl As Label = CType(Label1, Label)
lbl.Text ="Your String Value"

HTH

答案 3 :(得分:0)

这是一个很好的代码,他写了@Verdolino,但是有点儿小车,因为如果你的控件嵌套在一个嵌套的组合框内,它仍然嵌套在其他控件中,它会破坏。

但这是一种很好的方式。 这是一个递归函数,它将调查结束 嵌套控件。

Function GetControl(OwnerControl as Control,FindControlName as string) as Control
     If OwnerControl.Controls.Count > 0 Then
        '//===>It will loop in each control of the control container.
        For Each iControl as Control in OwnerControl.Control
             GetControl(OwnerControl ,FindControlName)
        Next
     Else
         '//===>this code is when the control is not a container and will check if the name macth
         If OwnerControl.Name.ToUpper =  FindControlName.ToUpper Then
               '//===>TODO HERE:Add here any code if the control was found
               ' you can register some events handler if you want
               ' AddHandler OwnerControl.Click, AddressOf _MyClickEventSub

                Return OwnerControl
         End If
     End If
End Sub

dim txtControl as control = GetControl(Me,"txtName")

If not txtControl Is Nothing Then
  '//===>TODO HERE:if the control was found
End Sub