2017-10-27 9 views
0

私は最初のフォームから2番目のフォームに渡される変数を持っています。しかし、この変数をComboBoxイベントハンドラメソッド内で使用しようとすると、空白が表示され、その理由がわかりません。ComboBoxメソッドに変数を渡す

Public CellValue As String 

Public Sub New(ByVal CellValue As String) 
    InitializeComponent() 
    MsgBox(CellValue) 
End Sub 

これはうまくいきます。私はCell Valueでメッセージボックスを表示できます。しかし、私は同じフォーム上のコンボボックスメソッドでこのCellValueにアクセスしようとすると変数が空白になり、なぜその理由が分かりません。

Public Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged 
    MsgBox(CellValue) 
End Sub 

私は、コンボボックス内の引数として「文字列としてByVal CellValue」を入れて試してみたが、それは動作しません、私はそれがイベントを処理することができないというエラーが発生します。

変数がpublicに設定されているため、何が起こっているのか分かりません。私が何時間もネットを検索しているので、正しい方向への助けがあれば大丈夫です。

Imports MySql.Data.MySqlClient 
Public Class Form1 
Dim MysqlConn As MySqlConnection 
Dim COMMAND As MySqlCommand 
Dim value As String 

Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click 

End Sub 

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    MysqlConn = New MySqlConnection 
    MysqlConn.ConnectionString = "server=0.0.0.0; 
            userid=username; 
            password=******; 
            database=password" 
    Dim SDA As New MySqlDataAdapter 
    Dim dbDataSet As New DataTable 
    Dim bSource As New BindingSource 

    Try 
     MysqlConn.Open() 
     Dim Query As String 
     Query = "select CaseNumber, FirstName, LastName from customer" 
     COMMAND = New MySqlCommand(Query, MysqlConn) 
     SDA.SelectCommand = COMMAND 
     SDA.Fill(dbDataSet) 
     bSource.DataSource = dbDataSet 
     DataGridView1.DataSource = bSource 
     SDA.Update(dbDataSet) 

     MysqlConn.Close() 
    Catch ex As MySqlException 
     MessageBox.Show(ex.Message) 
    Finally 
     MysqlConn.Dispose() 
    End Try 
End Sub 

Public Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick 
    If e.ColumnIndex = 0 Then 
     Dim CellValue As Object = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value 

     If IsDBNull(value) Then 
      MsgBox("No Case Number for this particular record.") 
     Else 

      Dim ThirdForm As New Form2(CellValue) 
      Me.Hide() 
      ThirdForm.Show() 

     End If 
    End If 
End Sub 
End Class 
+2

あなたは、その変数に渡されたCellValueを保存していません。彼らが同じ名前を持っているという事実は自動的に代入をしません。実際は、あなたのコードをもっと混乱させるでしょう。ところで、 'Public'はそれとは関係がありません。その変数をフォームの外で利用できるようにします。 'Me.CellValue = CellValue' – Plutonix

+0

これはうまくいきました、ありがとうございました。変数がフォームの上部で動作する場合、なぜそれが設定されないのかまだ分かりません...しかし、私はこれを心に留めておきます。ありがとうございました。 – user3053446

+2

私が言ったように、先頭の「CellValue」変数は、渡された変数とは異なる変数です**。彼らは非常に異なるスコープを持っています:Publicはフォームレベルのスコープを持ち、もう一つは 'Sub New'だけに存在します。あなたは彼らに同じ名前を与えても同じ変数にはならない。あなたがラースのショーとは違う名前を付けた方が良いでしょう。 – Plutonix

答えて

0

以下のコメントセクションに私のためPlutonixのおかげで働いていた:それは場合に役立ちます。ここ

は、Form1のです。ありがとうございました。

Me.CellValue = CellValue 
関連する問題