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
在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