Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 WinForms引用组合框SelectedValue使用ActiveForms.Controls_Vb.net_Visual Studio_Winforms - Fatal编程技术网

VB.Net WinForms引用组合框SelectedValue使用ActiveForms.Controls

VB.Net WinForms引用组合框SelectedValue使用ActiveForms.Controls,vb.net,visual-studio,winforms,Vb.net,Visual Studio,Winforms,我试图通过使用ActiveForm获取组合框的SelectedValue,而不指定表单名称。它用于位于类文件中的查询,可以从两种不同的形式使用,因此它需要是泛型的 Dim AcctDetailsAdapter As New SQLiteDataAdapter("SELECT * FROM [Accounts] WHERE_ [AcctName] = '" & Form.ActiveForm.Controls("SelectAccount").SelectedValue & "'"

我试图通过使用ActiveForm获取组合框的SelectedValue,而不指定表单名称。它用于位于类文件中的查询,可以从两种不同的形式使用,因此它需要是泛型的

Dim AcctDetailsAdapter As New SQLiteDataAdapter("SELECT * FROM [Accounts] WHERE_
[AcctName] = '" & Form.ActiveForm.Controls("SelectAccount").SelectedValue & "'", db.connect)
下面的部分是它明显断裂的地方,我想不出另一种方法来解决它

Form.ActiveForm.Controls("SelectAccount").SelectedValue
我可以在引用没有问题的文本框时使用此选项,但在我需要使用selectedvalue的查询中,我无法找到解决方案。有没有我没有想到的想法或其他方向?我对vb.net非常陌生

我还尝试使用一个变量来捕获ActiveForm名称以便传递它,但这似乎也不起作用

更新:在Jimi的帮助下,我已经能够使用以下代码使其正常工作:

Dim SelectedAccount = TryCast(Form.ActiveForm.Controls.Find("SelectAccount", True).FirstOrDefault, ComboBox).SelectedValue.ToString()
Dim AcctDetailsAdapter As New SQLiteDataAdapter($"SELECT * FROM [Accounts] WHERE [AcctName] = '{SelectedAccount}'", db.connect)
希望这有助于将参数传递给@jmcillhinney引用的查询

我现在有最后一个问题,使用相同的原理,它似乎不适用于ToolStripStatusLabel,因为它在技术上不是控件

TryCast(Form.ActiveForm.Controls.Find("StatusLabel", True).FirstOrDefault, ToolStripStatusLabel).Text = "test"
为控件集合编制索引时,将返回控件引用。您可能正在使用TextBox的Text属性。文本是控件类的成员,因此可以将其用于任何控件。SelectedValue是ComboBox类的成员,因此必须强制转换为该类型才能访问该成员。如果你想安全,你应该确认有这样的控制

Dim cb = TryCast(Form.ActiveForm.Controls("SelectAccount"), ComboBox)

If cb IsNot Nothing Then
    'There is a ComboBox with that name on the active form, so use 'cb' here.
    Dim AcctDetailsAdapter As New SQLiteDataAdapter($"SELECT * FROM [Accounts] WHERE [AcctName] = '{cb.SelectedValue}'", db.connect)

您确实应该使用参数将值插入到SQL代码中,而不是任何类型的字符串串联。即使您不受SQL注入的影响,也有可能出现格式错误或不成对的单引号,例如,如果值为O'Brien,您的查询将失败。如果每次只使用参数,则不会出错。

Dim comboValue=DirectCastForm.ActiveForm.Controls选择帐户、ComboBox.SelectedValue.ToString。您需要1确保SelectAccount是该窗体上的控件,否则将出现NullReferenceException,因此,可能需要先获取控件引用,然后尝试提取值;2您需要设置ComboBox.ValueMember以获取其SelectedValue。使用ToString将其转换为字符串。将Option Strict和Option Explicit设置为On有很大帮助。嗨,Jimi,我尝试了你的解决方案,但遇到了与下面的答案相同的问题。对象引用未设置为对象的实例。我假设它无法从我的组合框及其中断中找到任何值,但100%确定我有一个同名的组合框,其中已经包含了值。我知道我遗漏了一些超基本的东西。你需要检查什么是空引用。返回的是组合框引用还是Form.ActiveForm对象?ComboBox控件是窗体的直接子级还是另一个容器的子级Panel/SplitContainer/FlowLayoutPanel等。。在这种情况下,可以使用Form.Controls.Find方法,在该方法中指定搜索所有子控件。出现异常时,需要指定此异常的详细信息。如果你修改了你的代码,更新你的问题,否则答案可能会变得无用。就是这样!!!它在我表格上的一个面板内!我没有意识到那会起作用。我把它从面板中拉出来,直接放到表单中,它工作得很好。我该如何将这个发现添加到我的场景中,或者引用panel.combobox?Dim SelectedAccount=TryCastForm.ActiveForm.Controls.FindSelectAccount,True,ComboBox.SelectedValue.ToString似乎不太喜欢我。不幸的是,我仍在努力解决这个问题-我理解trycast的概念并获得ComboBox的选定值,但我仍然在使用未设置为对象实例的对象引用。我已经测试过使用ActiveForm.Name来显示活动的内容,以确保ActiveForm是正确的。100%我有一个组合框,里面有正确名称的值。这是因为我的组合框中填充了数据源吗?我刚刚对你的设置做了一个沙盒测试,如果我在加载时手动将数据加载到combobox中,效果会非常好。嗨@jmcillhinney,我能够结合使用你的参数和Jimi在上面的帮助在面板中查找控件。我已经更新了我原来的帖子上面,包括我目前在地方,它似乎是正常工作。