Vb.net 在form2中使用从form1.textbox到mysql连接的输入

Vb.net 在form2中使用从form1.textbox到mysql连接的输入,vb.net,winforms,Vb.net,Winforms,如何使用从Form1中的文本框接收的输入与form2中的mySQL建立连接。 现在我的程序是这样的: Form1打开并要求输入服务器、用户名和密码。 有3个按钮将使用form2模块打开不同的表单,在form2中是SQL连接字符串 我现在在form2中的连接字符串中有: Public Const cnString As String = "datasource=" & DBSelector.txtServer.Text & ";" _

如何使用从Form1中的文本框接收的输入与form2中的mySQL建立连接。 现在我的程序是这样的:

Form1打开并要求输入服务器、用户名和密码。 有3个按钮将使用form2模块打开不同的表单,在form2中是SQL连接字符串

我现在在form2中的连接字符串中有:

Public Const cnString As String = "datasource=" & DBSelector.txtServer.Text & ";" _
                                  & "username=" & DBSelector.txtUsername.Text & ";" _
                                  & "password=" & DBSelector.txtPassword.Text & ";" _
                                  & "database=" & DBSelector.txtDatabase.Text & ";"
现在我遇到了这个错误:“对非共享成员的引用需要对象引用。” 我是Visual Basic新手,无法解决此问题。 我认为这是因为Form2是一个模块,而不是一个公共类

我希望有人能帮助我。提前谢谢

  • 若要在“live”中引用另一个表单,必须有一个包含第二个表单实例的变量

    要从主表单代码中引用新表单,可以使用与其创建的第二个表单相同的变量

    在您的情况下-从被调用表单到调用方表单的引用,您可以1。将表单实例存储在表单本身的静态变量中,2。将其参数传递给第二个表单构造函数(New()子函数)

    或者,您可以通过直接将信息发送给构造函数跳过所有主题,因此:

    在您的案例中,代码-DBSelector中的主选项:

    Public Class DBSelector
    
        ...
    
        Public Sub LanchSecondForm()
            Dim form2 As Form2 = New Form2(txtServer.Text, _
                                           txtUsername.Text, _
                                           txtPassword.Text, _
                                           txtDatabase.Text)
    
            form2.Show()
        End Sub
    
        ...
    
    End Class
    
    Public Class Form2
    
        ...
    
        Public cnString As String
        Public Sub New(datasourcePrm As String, _
                       usernamePrm As String, _
                       passwordPrm As String, _
                       databasePrm As String)
            cnString = "datasource=" & datasourcePrm & ";" _
                     & "username=" & usernamePrm & ";" _
                     & "password=" & passwordPrm & ";" _
                     & "database=" & databasePrm & ";"
    
            InitializeComponent()
        End Sub
    
        ...
    
    End Class
    
    第二个表单代码:

    Public Class DBSelector
    
        ...
    
        Public Sub LanchSecondForm()
            Dim form2 As Form2 = New Form2(txtServer.Text, _
                                           txtUsername.Text, _
                                           txtPassword.Text, _
                                           txtDatabase.Text)
    
            form2.Show()
        End Sub
    
        ...
    
    End Class
    
    Public Class Form2
    
        ...
    
        Public cnString As String
        Public Sub New(datasourcePrm As String, _
                       usernamePrm As String, _
                       passwordPrm As String, _
                       databasePrm As String)
            cnString = "datasource=" & datasourcePrm & ";" _
                     & "username=" & usernamePrm & ";" _
                     & "password=" & passwordPrm & ";" _
                     & "database=" & databasePrm & ";"
    
            InitializeComponent()
        End Sub
    
        ...
    
    End Class
    
  • Const表示编译时已知的绝对值。不可能指定“动态”值,因此:

    Public a As String
    Public Const b As String = a       'error: a its a variable
    Public Const b As String = "abc"   'correct
    

  • 希望我能理解并帮助您。

    我想我现在理解了一点,但是我没有任何东西可以在form1(DBSelector)中编辑?因为当我这样尝试时,我无法连接到数据库。对不起,我需要这么多信息,但我对Visual Basic非常陌生。@SCALETTA我编辑了我的答案。在我错之前,我认为DBSeletor是次要的,现在我明白了主要的。谢谢你的帮助,但是我忘记了说Form2(gModule)是一个模块,我不能把“Dim gModule As gModule=New gModule”。再次抱歉,我忘了说这是一个模块。。。我对VisualBasic很陌生,我不知道VB中的每个函数和类。删除我的代码2。在模块中创建一个公共变量,以便将
    public cnString作为String
    3。从DBSelector使用以下代码:
    gModule.cnString==“datasource=”&DBSelector.txtServer.Text&“;”\u&“username=”&DBSelector.txtextername.Text&“;”\u&“password=”&DBSelector.txtspassword.Text&“;”数据库=”&DBSelector.txtDatabase.Text&“;”
    好了,现在它可以工作了!!!非常感谢。没有你,我不可能做到这一点:)