【问题标题】:Get the name of controls (buttons) dynamically动态获取控件(按钮)的名称
【发布时间】:2013-02-22 09:37:53
【问题描述】:

我有 10 个按钮,即 button01button02 ... button10。我想要的是如何操作它。

For x=1 to 10
  button(x).text = "blah" 'from database...or something
next 

我需要这样做,因为我有 10 个或更多按钮,并且我想通过初始化来操作它。这样我就不会一一手动进行。我不知道该怎么做。我还是 .NET 的新手。

【问题讨论】:

    标签: vb.net winforms controls


    【解决方案1】:

    您不应该仅仅为了节省几行代码而以这种容易出错的方式执行此操作。但如果你真的想要......

    您可以使用Panel 或其他将相关控件进行逻辑分组的容器控件。然后使用MyPanel.Controls.OfType(Of Button)()进行过滤,找到那里的所有按钮。

    For Each btn As Button In MyPanel.Controls.OfType(Of Button)()
        btn.Text = "blah" 'from database...or something
    Next
    

    另一种方法是先将它们全部放入数组或其他集合类型中,例如 List(Of Button),然后再循环它们:

    Dim myButtons = {button1, button2, button3, button4, button5, button6}
    For Each btn In myButtons
        btn.Text = "blah" 'from database...or something
    Next
    

    最后,您可以使用ControlCollection.Find 查找名称为给定字符串的控件:

    For i As Int32 = 1 To 10
        Dim btns = Me.Controls.Find("button" & i, True)
        If btns.Length > 0 Then
            btns(0).Text = "blah" 'from database...or something
        End If
    Next
    

    【讨论】:

    • 这很好,我使用了你的最后一个选项。可能是我需要的。欢呼
    【解决方案2】:

    简单地说:

    For i As Integer = 1 To 10
        Me.Controls("button" & i.ToString("00")).Text = "blah"
    Next
    

    【讨论】:

      【解决方案3】:

      您必须遍历这些按钮的父容器。

      假设您将这些控件放在名为PnlTest 的面板中,那么您必须这样做:

      For Each xControls As Control In PnlTest.Controls
      
          If TypeOf xControls Is Button Then
              xControls.Text = "blah" 'from database...or something
          End If
      
      Next
      

      【讨论】:

        【解决方案4】:

        您可以尝试使用 WebControl 中的 FindControl 方法:

        For x=1 to 10
            FindControl("button" & if(x < 10, "0" & x, x) = "blah" 'from database...or something
        next 
        

        编辑:我主要使用 C#,而不是 VB,所以它可能需要一些改动。但是,我相信这种方法是一样的。

        【讨论】:

        • 我假设 OP 要求 Winforms,winforms 中没有 FindControl
        【解决方案5】:

        zeroyevi cubosoft.cl -- DevExpress -- la clave esta (bar.button.item) en Me.RibbonControl.Items("NAME_BUTTON" ).Enabled = True or false

        Private Sub GetSearchPerfilModulosBotones(ByVal _id_perfil As String)
        
            Dim dt As New DataTable
            Dim _act_btns As Boolean
        
            Dim _name_btns As String
            Dim _name_module As String = Me.Name.ToString()
            Try
        
                Dim _ControlDatosSistema As New ControlDatosSistema()
                With _ControlDatosSistema
                    dt = .GetSearchPerfilModulosBotones(_id_perfil, _name_module )'SQL QUERY
        
        
                  If (dt.Rows.Count >= 1) Then
                        For Each row As DataRow In dt.Rows
        
                            _act_btns = row("ACT_BTNS") 'BOTONES PERFIL True or False
                            _name_btns = row("NAME_BTNS").ToString()'NOMBRE BOTONES TABLA
                            Me.RibbonControl.Items(_name_btns ).Enabled = _act_btns 
                        Next
                    End If
        
        
        
                End With
                _ControlDatosSistema = Nothing
                dt.Dispose()
        
        
        
            Catch ex As Exception
        
            End Try
        End Sub
        

        【讨论】:

        • 请对此作出解释。
        • 我不知道代码的哪一部分没看懂,因为从数据库中运行信息并获取on或off的名称和值也是DevExpress的一个特殊组件
        猜你喜欢
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 2013-09-16
        相关资源
        最近更新 更多