Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从模块填充vb.net组合框的通用函数/sub_.net_Vb.net_Generics_Combobox - Fatal编程技术网

用于从模块填充vb.net组合框的通用函数/sub

用于从模块填充vb.net组合框的通用函数/sub,.net,vb.net,generics,combobox,.net,Vb.net,Generics,Combobox,尝试在vb.net 2010中的模块中使用通用例程填充组合框。我正在将变量formname.ComboxName传递给子对象,并将其拆分为2,运行一个查询,这就是我无法进一步说明的地方。我需要这样做,因为我有很多表单和组合框要填充,我认为在一个模块中使用通用方法会很好 我可能会分解并为每个组合框创建一个数据集,但这肯定会起作用,并且是我的首选 在我称之为--loadComboBoxOrHelp(“FrmArchive.cmbSrcType”)的形式代码中,这是在我的模块中,对一些代码进行了注释,

尝试在vb.net 2010中的模块中使用通用例程填充组合框。我正在将变量formname.ComboxName传递给子对象,并将其拆分为2,运行一个查询,这就是我无法进一步说明的地方。我需要这样做,因为我有很多表单和组合框要填充,我认为在一个模块中使用通用方法会很好

我可能会分解并为每个组合框创建一个数据集,但这肯定会起作用,并且是我的首选

在我称之为--loadComboBoxOrHelp(“FrmArchive.cmbSrcType”)的形式代码中,这是在我的模块中,对一些代码进行了注释,以显示我迄今为止所做的尝试。当然,如果我取消注释它,那么CTYPE上面的那一行是可以工作的,但它不是泛型的。正如您可以从函数名猜到的,我想填充一个组合框或帮助文本字段,但我还没有完成该代码,我假设一旦组合框部分工作,我就可以猜出文本框部分。查询将是相同的,只是一个文本框而不是组合框

CTYPE是我的错误,我试图从一个模块中执行此操作,因此它非常通用,如果我将其放入表单代码中,它当然可以工作。**我取出了SQL,因为它混淆了问题。我现在用loadComboBoxOrHelp(我,cmbSrcType)将其称为


结束模块

我认为您可以直接将组合框传递给函数,但是如果您真的想使用字符串,那么您需要找到一种方法从传入的名称中检索
表单
和组合实例

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()

为什么不直接传递combobox控件,而不是嵌入名称的字符串?我发誓我尝试分别传递表单和combo名称,但它不起作用,但现在起作用了,谢谢。但是,我无法让您的代码按原样工作,它不会给出错误,也不会将值放入。由于DB的构建方式,如果我可以传入一个值,那么就更容易了,但是我将对您的代码进行更多的实验,我更喜欢拆分该值。我没有对SQL进行参数化,因为在这种情况下,只有4个管理器有权更改查找值,所以我不关心SQL注入,但我明白你的观点,即SQL注入更简单,无论如何都会这样做。好吧,我说得太快,仍然不起作用。在家里,我让它工作,但只在一个非常小的测试应用程序。在我的真实应用程序上,当我标记此问题已解决时,我无法访问该应用程序,但它仍然无法在工作中工作,我放弃了。它可以像Steve编写的那样工作,但我的应用程序有很多表单,这不是出于某种原因。作为记录,我将sub改为函数,返回一个包含数据的数组,并以这种方式加载,虽然不太通用,但它可以工作。这一行,
Dim cmbBox=formName.Controls(words(1))
,正是我在这种情况下所需要的。我已经有了全局的表单名,只需要知道如何处理组合框。
    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()