VB.net - 使用字符串的目标对象(对象位于选项卡下,然后是面板,然后是拆分器)

VB.net - Target object using string (Object is under tab then panel then splitter)

在php和javascript中我可以做这样的事情

If ($a == 1){
  $set_num = 1
} Else {
  $set_num = 2
}

textbox_ . $set_num = "Some text here"
checkbox_ . $set_num = "Some text here"
radio_ . $set_num = "Some text here"

如何在 vb.net 中执行此操作?

在我的设计页面中,我有很多面板、拆分器、文本框、复选框和其他东西,请注意这个设计在面板选项卡(索引 2)下。我想要的是创建一个短代码(尽可能短),这样当用户在某个文本框中键入内容时,我就会知道要激活什么计划,因此每次用户单击应用按钮时,系统只会发送具有最后一个的集合text_change.

这是我在 vb.net 中的代码,我想使用 me.controls 调用字符串中的对象,但它不起作用

     Dim lab As Label

     For i As Integer = 1 To 10
        lab = Me.Controls("tb_hour_" & i)
        lab.Text = "Test" & i
     Next

顺便说一句,我的文本框、复选框和单选按钮的名称是这样的

tb_hour_1、tb_minute_1、cb_monday_1 等。_1 代表时间表 1,所以对于时间表 2,它将像这样 tb_hour_2、tb_minute_2, cb_monday_2, 等等

实际上我的代码正在运行,当我将文本框、复选框等放入面板和拆分器时,问题就出现了。 panel和splitter的目的只是为了有个设计(我的目的是border)

目前这是我用来实现我的目标的代码,但是我的代码很难维护,因为我嵌套了一个条件。这就是为什么我想应用 while 循环并定位字符串中的所有对象

If Lbl_Temp_1.Text = "0" Then
        frmTerminal.Lbl_Settings_Cmd.Text = "CSR01^"
        frmTerminal.cmdSend_Click(sender, e)
    Else
        If Lbl_Temp_2.Text = "0" Then
            frmTerminal.Lbl_Settings_Cmd.Text = "CSR02^"
            frmTerminal.cmdSend_Click(sender, e)
        Else
            If Lbl_Temp_3.Text = "0" Then
                frmTerminal.Lbl_Settings_Cmd.Text = "CSR03^"
                frmTerminal.cmdSend_Click(sender, e)
            Else
                If Lbl_Temp_4.Text = "0" Then
                    frmTerminal.Lbl_Settings_Cmd.Text = "CSR04^"
                    frmTerminal.cmdSend_Click(sender, e)
                Else
                    If Lbl_Temp_5.Text = "0" Then
                        frmTerminal.Lbl_Settings_Cmd.Text = "CSR05^"
                        frmTerminal.cmdSend_Click(sender, e)
                    Else
                        If Lbl_Temp_6.Text = "0" Then
                            frmTerminal.Lbl_Settings_Cmd.Text = "CSR06^"
                            frmTerminal.cmdSend_Click(sender, e)
                        Else
                            If Lbl_Temp_7.Text = "0" Then
                                frmTerminal.Lbl_Settings_Cmd.Text = "CSR07^"
                                frmTerminal.cmdSend_Click(sender, e)
                            Else
                                If Lbl_Temp_8.Text = "0" Then
                                    frmTerminal.Lbl_Settings_Cmd.Text = "CSR08^"
                                    frmTerminal.cmdSend_Click(sender, e)
                                Else
                                    If Lbl_Temp_9.Text = "0" Then
                                        frmTerminal.Lbl_Settings_Cmd.Text = "CSR09^"
                                        frmTerminal.cmdSend_Click(sender, e)
                                    Else
                                        If Lbl_Temp_10.Text = "0" Then
                                            frmTerminal.Lbl_Settings_Cmd.Text = "CSR10^"
                                            frmTerminal.cmdSend_Click(sender, e)
                                        Else
                                            Tmr_Schedule_Get.Enabled = False
                                            frmTerminal.Tmr_Write_Check.Enabled = True
                                            Btn_Schedule.Enabled = False
                                            Me.Settings_Tab.TabPages(1).Enabled = True

                                            If Cb_Set_1.Checked = True Or Cb_Set_2.Checked = True Or Cb_Set_3.Checked = True Or Cb_Set_4.Checked = True Or Cb_Set_5.Checked = True Or Cb_Set_6.Checked = True Or Cb_Set_7.Checked = True Or Cb_Set_8.Checked = True Or Cb_Set_9.Checked = True Or Cb_Set_10.Checked = True Then
                                                Btn_Schedule.Enabled = True
                                            End If

                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If

当您双击复选框等时,IDE 会自动为其创建一个处理程序,您可以在其中放置您想要的代码。您需要在 handles-sub 中使用不同的参数才能使其正常工作。

 Private Sub CB_reloadText_CheckedChanged(sender As Object, e As EventArgs) Handles CB_reloadText.CheckedChanged
    Dim enabled As Boolean

    If CB_reloadText.Enabled = True Then
        enabled = True
    Else
        enabled = False
    End If

End Sub

目前似乎无法定位面板下方的对象,而该面板也在面板下方。

我设法通过重新创建我的设计布局来解决这个问题,我尽可能地将面板的使用限制为一个对象仅在 1 个面板下,通过这样做我可以轻松地定位对象使用此代码。

For Each Ctrl_Panel_Set As Control In Schedule_Tab
        If TypeOf Ctrl_Panel_Set Is Panel And Ctrl_Panel_Set.Name.StartsWith("Panel_Set_") Then
            For Each Ctrl_Lbl_Temp In Ctrl_Panel_Set.Controls
                If TypeOf Ctrl_Lbl_Temp Is Label Then
                    If Ctrl_Lbl_Temp.Name.StartsWith("Lbl_Temp_") Then
                        If Ctrl_Lbl_Temp.Text = "0" Then
                            Panel_Set_Num = CType(Ctrl_Panel_Set, Panel).Name
                            Set_Num = "CSR" & Panel_Set_Num.Substring(Panel_Set_Num.Length - 2) & "^"
                            Return Set_Num
                        End If
                    End If
                End If
            Next
        End If
    Next Ctrl_Panel_Set