本文介绍了通过动态构建控件名称来更新控件值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个列中有一个包含15个ComboBox的表单。被称为cbo_T_Project_01到15

每个ComboBox右边都有一个Label。名为lbl_T_Init_01至15



当用户从Combobox中选择一个值时,我需要更新与其相邻的标签文本。



在我努力不写代码的过程中,我试图构建适用标签的控件名称,因为我不知道用户会选择哪个ComboBox。













I have a form with 15 ComboBoxes in a column. Called cbo_T_Project_01 to 15
Each ComboBox has a Label to the right of it. Called lbl_T_Init_01 to 15

When the user selects a value from the Combobox I need to update the text of the Label adjacent to it.

In my endeavour not to write reams of code I am attempting to 'build' the Control name for the applicable Label because I dont know which ComboBox the user will select.






Private Sub cbo_Project_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_T_Project_01.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_02.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_03.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_04.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_05.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_06.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_07.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_08.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_09.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_10.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_11.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_12.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_13.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_14.SelectedIndexChanged,
                                                                                                                     cbo_T_Project_15.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_01.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_02.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_03.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_04.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_05.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_06.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_07.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_08.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_09.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_10.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_11.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_12.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_13.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_14.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_15.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_16.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_17.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_18.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_19.SelectedIndexChanged,
                                                                                                                     cbo_O_Project_20.SelectedIndexChanged

        Dim ProjCtrl As Control = Me.ActiveControl

        Dim InitCtrl As Label
        InitCtrl.Name = "lbl_T_Init_" & Microsoft.VisualBasic.Right(ProjCtrl.Name, 2)

        If Me.ActiveControl.Text = "xxxxxx" Then
            InitCtrl.Text = "Primary Project"
        Else
            InitCtrl.Text = "Secondary Project"
        End If

    End Sub    





显然我在Dim InitCtrl阶段出错了。

甚至可以将Label与适用的ComboBox关联起来吗?



任何人都可以提供协助。在此先感谢



Clearly I am going wrong at the Dim InitCtrl stage.
Is it even possible to associate the Label with the applicable ComboBox?

Could anyone please assist. Thanks in advance

推荐答案

Dim InitCtrl As Label
InitCtrl.Name = "lbl_T_Init_" & Microsoft.VisualBasic.Right(ProjCtrl.Name, 2)





应该更改为:



Should change to something like:

Dim sInitCtrlName As String
sInitCtrlName = "lbl_T_Init_" & Microsoft.VisualBasic.Right(ProjCtrl.Name, 2)
Dim InitCtrl As Label = Me.Controls(sInitCtrlName) 





甚至还有其他方法,例如:

- 根据标签的位置查找标签,如果每个标签始终与其ComboBox配合位于同一侧且距离。

- 如果标签 ComboBox 控件放在 TableLayoutPanel 内(有2列,行数与Label + ComboBox一样多)对是),您可以使用 GetPositionFromControl GetControlFromPosition 方法从任何其他控件中查找配对控件。

- 具有自定义的ComboBox派生具有标签类型的专用属性的类,在设计时将其分配给正确的标签控件,但忘记了名称。

- 分配标签控制为标记道具初始化时 ComboBox 的erty。

- 在初始化时将相同的值分配给 Label Tag / b>和 ComboBox 并使用它来查找匹配的标签循环 Me.Controls 集合。

- 创建复合 UserControl 包含 Label ComboBox ,处理所有事件本身并公开内部属性,然后将每个现有的Label + ComboBox对替换为此控件的一个实例。

- 按照 nilesh sawardekar 的建议,在运行时创建并添加控件,在此过程中以某种方式链接它们。



问候,

Daniele。



There are even other approaches, like:
- Finding the label by its location, if each label is always at the same side and distance from its ComboBox mate.
- If the Label and ComboBox controls are layed inside a TableLayoutPanel (with 2 columns and as many rows as the Label+ComboBox pairs are), you can use GetPositionFromControl and GetControlFromPosition methods to find the mate control from any other control.
- Having a custom ComboBox-derived class with a dedicated property of type Label to assign at design time to the correct Label control, though forgetting about the names.
- Assigning the Label control as Tag property of the ComboBox at initialization time.
- Assigning at initialization time the same value to the property Tag of both the Label and ComboBox and using it to find the matching label looping Me.Controls colletion.
- Creating a composite UserControl containing both a Label and a ComboBox , handling all events itself and exposing the internal properties, then replacing each existing pair of Label+ComboBox with one instance of this control.
- As suggested by nilesh sawardekar, create and add the controls at run-time and during this process link them in some way.

Regards,
Daniele.


这篇关于通过动态构建控件名称来更新控件值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 10:05
查看更多