generic function / sub用于从模块中填充vb.net组合框

时间:2013-12-07 00:40:26

标签: .net vb.net generics combobox

尝试使用vb.net 2010中的模块中的通用例程填充组合框。我将变量formname.comboboxname传递给sub并将其拆分为2,运行查询,这是我无法去的地方进一步。我需要这样做,因为我有很多形式和组合框来填充,认为一个模块中的通用方法会很棒。

我可能会分解并为每个组合框做一个数据集,但这当然应该有用,并且是我的首选。

在表单代码中我用--- loadComboBoxOrHelp(“FrmArchive.cmbSrcType”)调用它,这是在我的模块中,一些代码被注释只是为了显示我到目前为止所尝试的内容。当然,如果我取消注释它,那么CTYPE上方的线就会起作用,但它不是通用的。正如您可以从函数的名称猜测,我想填充组合框或帮助文本字段,但我还没有完成该代码,我假设一旦组合框部分工作,我可以猜出文本框部分。查询将是相同的,只是一个文本框而不是组合框。

CTYPE是我的错误,我试图从一个模块这样做,所以它非常通用,如果我把它放在表单代码当然它的工作原理。 * *我拿出了SQL,因为它混淆了这个问题。我现在用loadComboBoxOrHelp(Me,cmbSrcType)

来调用它
Public Sub loadComboBoxOrHelp(ByVal formName, ByVal boxName)
    Try
        CType(formName.Controls(boxName), ComboBox).Items.Add("ABC") 'myReader.GetString("lookupValue").ToString)
    Catch ex As Exception
        MessageBox.Show("Error while retrieving records on table Lookups..." & ex.Message, "Lookups Table")
    Finally
        If conn.State = ConnectionState.Open Then conn.Close()
    End Try
End Sub

结束模块

1 个答案:

答案 0 :(得分:2)

好吧,我认为你可以直接将ComboBox传递给函数,但是如果你真的想要使用一个字符串,那么你需要找到一种从传入的名称中检索Form和combo实例的方法。 / p>

Public Sub loadComboBoxOrHelp(ByVal boxName)
    Dim words = boxName.Split(".") 
    Dim formName = Application.OpenForms(words(0))  
    Dim cmbBox = formName.Controls(words(1))
    ......

作为旁注。使用参数化查询来构建sql命令,而不是字符串连接。此外,如果您完全控制传递给sql命令的内容,最好避免引用/取消引用值

    conn.Open()
    myCommand.Connection = conn
    Dim query = "SELECT name, lookupValue " _
                & "FROM lookups " _
                & "WHERE name = @bxname"
    myCommand.CommandText = query
    myCommand.Parameters.AddWithValue("@bxname", boxName)
    myReader = myCommand.ExecuteReader()