使用变量访问表单

问题描述 投票:0回答:1

所以我有一个函数,可以用各个部门的名称填充下拉列表。 该函数获取表单的名称以及下拉列表应用的控件。 我想我几乎可以使用函数中传递的字符串转换为表单名称,但无法让它正确引用表单上的控件。 代码如下

Public Function DeptList(ByVal myForm As String, ByVal myControl As String)
    Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
    Dim targetForm As Form = CType(asm.CreateInstance("Jigsaw2." & myForm), Form)
    SqlTxt = "SELECT * FROM Department WHERE Dept_Status = 'Active';"
    sql.ExecQuery(SqlTxt)
    Try
        For Each r As DataRow In sql.DBDT.Rows
            **[targetForm].DeptCombox.Items.Add(r("Dept_Name"))**
        Next
    Catch

    End Try


End Function

sql 工作正常,只是我遇到问题的粗体行

在stackoverflow上搜索过其他解决方案,但它们要么是用C编写的,要么不适合情况。

vb.net winforms
1个回答
0
投票

每个控件(包括表单)都有一个

Controls
集合属性,允许您通过控件的
Name
进行索引。假设您已经有一个
Form
引用并且您的控件将始终是
ComboBox
,您可以执行以下操作:

Using dropDownList = DirectCast(myForm.Controls(controlName), ComboBox)
    dropDownList.DisplayMember = "Dept_Name"
    dropDownList.DataSource = sql.DBDT.Rows
End Using

通常最好使用这样的数据绑定,而不是手动一项一项地添加项目。但在这种情况下它可能不起作用,因为我猜测您使用的是实施不佳的 DAL,并且

DataTable
将被重用。如果不是这种情况,您可以像我一样安全地绑定它,否则我将让您决定如何实际填充列表。

© www.soinside.com 2019 - 2024. All rights reserved.