2017-10-27 1 views
0

첫 번째 폼에서 두 번째 폼으로 전달되는 변수가 있습니다. 그러나 ComboBox 이벤트 처리기 메서드 내에서이 변수를 사용하려고하면 빈 변수가 표시되어 그 이유를 알 수 없습니다.ComboBox 메서드에 변수 전달

Public CellValue As String 

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

이것은 잘 작동하며 메시지 값을 셀 값과 함께 표시 할 수 있습니다. 그러나 동일한 Form에있는 내 콤보 상자 메서드에서이 CellValue에 액세스하려고하면 변수가 비어 있으며 이유를 파악할 수 없습니다. 나는 콤보의 인수로 "문자열로 ByVal의의 CellValue"는 퍼팅 시도했지만 작동하지 않는

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

, 나는이 이벤트를 처리 할 수없는 오류가 발생합니다.

나는 무엇이 진행되고 있는지 이해할 수 없도록 변수를 public으로 설정했습니다. 내가 그물을 수 시간 동안 찾고 있었기 때문에 올바른 방향으로 어떤 도움을 주면 좋을 것이다. 그 도움이된다면

는 여기를 Form1입니다 : 나 감사의 코멘트 섹션에서 Plutonix하는

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를 저장하지 않습니다. 동일한 이름을 사용한다는 사실은 자동으로 할당을하지 못합니다. 실제로 코드를 혼란스럽게 만듭니다. BTW,'Public'은 그 변수와 아무런 관계가 없습니다. 그 변수를 폼 외부에서 액세스 가능하게 만듭니다. 'Me.CellValue = CellValue' – Plutonix

+0

이렇게 해 줘서 고마워. 나는 변수가 폼의 맨 위에서 작동하면 왜 설정되지 않을지 아직 이해하지 못한다 ...하지만 나는 이것을 마음 속에 간직 할 것이다. 고맙습니다. – user3053446

+2

내가 말했듯이, 상단의 'CellValue' 변수 **는 전달 된 변수와 다른 변수입니다 **. 그것들은 매우 다른 범위를 가지고 있습니다 : Public은 폼 레벨 범위를 가지고 있고, 다른 하나는'Sub New'에만 존재합니다. 당신이 그들에게 같은 이름을 주었다고해서 그들에게 같은 변수가되지는 않습니다. Lars가 보여주는 것과 다른 이름을 주면 더 좋을 것입니다. – Plutonix

답변

0

(가) 일 다음. 고맙습니다.

Me.CellValue = CellValue 
관련 문제