Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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 无法从组合框中读取以用作子例程中的变量_Vb.net - Fatal编程技术网

Vb.net 无法从组合框中读取以用作子例程中的变量

Vb.net 无法从组合框中读取以用作子例程中的变量,vb.net,Vb.net,我试图让变量输入来自组合框。我原以为这会是一项更简单的任务,但我一直坚持下去,如果能得到一些帮助,我将不胜感激 我正在使用预打包的代码,这些代码连接到API,连接到服务器,并执行一些操作。我正在对它进行定制,以进行一些额外的计算,所有这些计算现在都可以正常工作,但是我用来执行这些计算的变量,在其中一个子例程中,是硬编码的,我希望能够使用组合框来读取它们。我已经用VB6和VBA做过很多次了,但我对vb.net(2010)还不熟悉,即使我的表单上有combobox,对combobox中所选数字的每次

我试图让变量输入来自组合框。我原以为这会是一项更简单的任务,但我一直坚持下去,如果能得到一些帮助,我将不胜感激

我正在使用预打包的代码,这些代码连接到API,连接到服务器,并执行一些操作。我正在对它进行定制,以进行一些额外的计算,所有这些计算现在都可以正常工作,但是我用来执行这些计算的变量,在其中一个子例程中,是硬编码的,我希望能够使用组合框来读取它们。我已经用VB6和VBA做过很多次了,但我对vb.net(2010)还不熟悉,即使我的表单上有combobox,对combobox中所选数字的每次引用最终都会得到一个空结果

在一个更简单的应用程序中,如下面的应用程序,我可以从组合框中获取数据:

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As     System.EventArgs) Handles Button1.Click
    Dim divisor As Integer
    Dim res1 As Integer
    If Int32.TryParse(ComboBox1.Text, divisor) Then
        MsgBox(ComboBox1.Text)
    Else
        MsgBox("error" & ComboBox1.Text)
    End If

    res1 = divisor - 9
    MsgBox(res1)

   End Sub
End Class
不幸的是,我正在使用的代码与上面的代码不配合。在不发布所有代码的情况下,这里是基本结构,也许这将帮助您帮助我找出上面代码的编写位置,这样它将获取组合框中的值,其中sub13(见下文)中的“除数”将是组合框中的数字,而不是硬编码的数字

你在下面看到的每个对组合框的引用都是“自动生成的”。也就是说,一旦我将组合框放在表单上,所有代码都会出现

Imports X.API

Public Class frmMain
Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

Public Sub New()
    MyBase.New()
   InitializeComponent()
End Sub

Protected Sub Dispose(ByVal disposing As Boolean)
End Sub

Private components As System.ComponentModel.IContainer

Friend WithEvents Panel1 As System.Windows.Forms.Panel

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    Me.ComboBox1 = New System.Windows.Forms.ComboBox()
    Me.ComboBox1.FormattingEnabled = True
    Me.ComboBox1.Location = New System.Drawing.Point(710, 117)
    Me.ComboBox1.Name = "ComboBox1"
    Me.ComboBox1.Size = New System.Drawing.Size(121, 21)
    Me.ComboBox1.TabIndex = 3
End Sub

#End Region

#Region " Member Variables "
Private mTable As DataTable

#End Region

#Region " Form and Control Events "

Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub

Private Sub frmMain_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
End Sub

Private Sub s1() 
End Sub

Private Sub s2() 
End Sub

Private Sub s3() 
End Sub

Private Sub s4() 
End Sub

#End Region

#Region " Operations "

Private Sub s5()
End Sub

Private Sub s6()
End Sub

Private Sub s7()
End Sub

Private Sub s8()
End Sub

#End Region

#Region " API Events "

Private Sub s8()
End Sub

Private Sub s9() 
End Sub

Private Sub s10()
End Sub

Private Sub s11()
End Sub

Private Sub s12() 
End Sub

#End Region

Private Sub s13()

    Dim divisor As Integer = 1

    '[this is where i want the divisor to draw from the combobox]

    'so instead of "Dim divisor As Integer = 1"
    i want "Dim divisor As Integer = contents of combobox

End Sub


' i have no idea why this code appears here
Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox

Private Class Item1
    Public Sub s14()
    End Sub
End Class

Private Class Item2
    Public Sub s15()
    End Sub
End Class

Private Class Item3
    Public Sub s16()
    End Sub
End Class
End Class
导入X.API
公开课
继承System.Windows.Forms.Form
#区域“Windows窗体设计器生成的代码”
公共分新()
MyBase.New()
初始化组件()
端接头
受保护的子处理(ByVal作为布尔值处理)
端接头
作为System.ComponentModel.IContainer的专用组件
Friend WithEvents Panel1作为System.Windows.Forms.Panel
私有子初始化组件()
Me.ComboBox1=New System.Windows.Forms.ComboBox()
Me.ComboBox1.FormattingEnabled=True
Me.ComboBox1.Location=新系统.图纸.点(710117)
Me.ComboBox1.Name=“ComboBox1”
Me.ComboBox1.Size=新系统.图纸.尺寸(121,21)
Me.ComboBox1.TabIndex=3
端接头
#末端区域
#区域“成员变量”
私有mTable作为数据表
#末端区域
#区域“形成和控制事件”
私有子frmMain_Load(ByVal sender作为对象,ByVal e作为System.EventArgs)处理MyBase.Load
端接头
私有子frmMain_Closing(ByVal sender作为对象,ByVal e作为System.ComponentModel.CancelEventArgs)处理MyBase.Closing
端接头
私人分队s1()
端接头
私人小组s2()
端接头
私人小组s3()
端接头
私人小组s4()
端接头
#末端区域
#区域“行动”
私人小组s5()
端接头
私人小组中六()
端接头
私人小组s7()
端接头
私人分队s8()
端接头
#末端区域
#地区“API事件”
私人分队s8()
端接头
私家分队s9(
端接头
私家小贩s10()
端接头
私人分包s11()
端接头
私人小组s12()
端接头
#末端区域
私人小组s13()
整数形式的Dim除数=1
“[这是我希望从组合框中提取除数的地方]
'因此,不是“作为整数的Dim除数=1”
我想要“Dim divisor As Integer=组合框的内容
端接头
“我不知道为什么会出现这种代码
Friend WithEvents ComboBox 1作为System.Windows.Forms.ComboBox
私有类项目1
公共附属法例(第14条)
端接头
末级
私有类项目2
公共分包s15()
端接头
末级
私人类项目3
公共分包s16()
端接头
末级
末级
我正在处理的sub是“s13()”,但是当我试图从组合框中读取时,我得到一个空白


我不知道如何将我的第一个示例中显示的代码准确地放置在上面显示的结构中。我本以为从组合框中读取代码会容易得多,但我被难住了。

您必须使用所选项目:

If Int32.TryParse(ComboBox1.selectedItem, divisor) Then
        MsgBox(ComboBox1.selectedItem)
    Else
        MsgBox("error" & ComboBox1.selectedItem)
    End If

给定函数的名称,很难准确地说出您正在尝试执行的操作。但这里有两个选项。如果在组合框中有值时调用组合框,则函数本身可以从组合框中访问该值,或者函数可以要求该值作为函数参数以及函数可以调用的任何调用ss组合框的值

首先,它看起来像这样:

Private Sub s13()
    Dim divisor as Int32 = 1
    If Int32.TryParse(Me.ComboBox1.Text, divisor) Then
        ' Perform your logic
    Else
        ' The input wasn't a valid integer, maybe show an error?
    End If
End Sub
Private Sub s13(ByVal divisor as Integer)
    ' Perform your logic
End Sub
而第二种方法可能如下所示:

Private Sub s13()
    Dim divisor as Int32 = 1
    If Int32.TryParse(Me.ComboBox1.Text, divisor) Then
        ' Perform your logic
    Else
        ' The input wasn't a valid integer, maybe show an error?
    End If
End Sub
Private Sub s13(ByVal divisor as Integer)
    ' Perform your logic
End Sub
调用需要获取值的代码:

Dim divisor as Int32 = 1
If Int32.TryParse(Me.ComboBox1.Text, divisor) Then
    s13(divisor)
Else
    ' The input wasn't a valid integer, maybe show an error?
End If

所有这一切需要注意的主要一点是,您应该使用
Int32.TryParse()
来确定组合框中输入的值实际上是否为整数,并在不是整数时处理错误条件。

对于遇到相同问题的任何人,这里是解决方案

我必须使用的代码非常庞大,因此它不允许我将combobox变量拉入任何Sub,尤其是因为这是一个多线程程序。然而,我知道,解决方案必须简单。这始终是需要记住的一点——解决方案从来没有那么复杂,而且您永远不需要像您所想的那样多的代码

在本例中,我沿着一个公共变量的路径

Public Shared divisor As Integer
我把这条线放在第一条线下面

Public Class frmMain
由于表单上还有其他下拉列表,显然是从中提取的,因此我转到与启动从服务器获取数据步骤的按钮相关的代码,只需单击另一个按钮

divisor = ComboBox1.Text
如果该子控件拉入其他组合框,那么它必须获取我想要的组合框中的数据。然后我所做的就是将这行代码添加到该按钮

divisor = ComboBox1.Text
由于除数现在是一个公共变量,因此按钮中记录的内容很容易传递给另一个运行其他例程的私有子组件。因此,在代码中的任何地方,我想使用变量“除数”,我所要做的就是提及它:)


我希望有一个更简单的方法来问这个问题。我的代码和你写的一模一样,但是组合框中的数字根本没有显示出来。起初我遇到了这样一个错误“Cross thread operation not valid:Control'Combox1'从