2013-02-18 1 views
2

작동하지 않습니다. 레이블은 기본값으로 만 돌아갑니다. 문제가 뭐라고 생각하니?vb.net을 사용하여 다른 양식에서 레이블 값 가져 오기

Private Sub ProfileControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Try 
     Dim conn As New MySqlConnection(ServerString) 
     Dim dap As New MySqlDataAdapter("select * from employee where LogInID = '" & Main.ID.Text & "'", conn) 
     Dim dt As New DataTable 
     dap.Fill(dt) 

     employeenum = dt.Rows(0).Item("EmployeeID") 
     position = dt.Rows(0).Item("Position") 
     employeename = dt.Rows(0).Item("FirstName") + " " + dt.Rows(0).Item("LastName") 

     lblemployeename.Text = employeename 
     lblemployeenum.Text = employeenum 
     EmpPosition.Text = position 

    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 

그리고 이것이다 :이 레이블의 값을 생성 형태는 사실 내가 여기

내 데이터베이스로 MySQL을 사용하고

: 좋아

이 내 코드입니다 3 개의 라벨의 값을 얻어 온다.

Private Sub addsavebutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addsavebutton.Click 
    Dim profile As New ProfileControl 


    If txtbranchname.Text <> "" Then 
     If addsavebutton.Text = "ADD" Then 

      Dim zero As Integer = 0 
      Dim SQLStatement As String = "INSERT INTO branch(BranchName,Centers)VALUES('" & txtbranchname.Text & "','0') " 
      SaveCenter(SQLStatement) 
      logdate = Convert.ToDateTime(Date.Now).ToString("yyyy-MM-dd hh:mm:ss") 
      logdate2 = Format(Date.Now, "yyyy-MM-dd") 
      status = "Added Branch " + txtbranchname.Text 
      SQLStatement = "INSERT INTO log(EmployeeID,Name,EmployeePosition,Date,DateTime,Status)VALUES('" & profile.lblemployeenum.Text & "','" & profile.lblemployeename.Text & "','" & profile.EmpPosition.Text & "','" & logdate2 & "','" & logdate & "','" & status & "')" 
      Savelog(SQLStatement) 
      txtbranchname.Clear() 
     ElseIf addsavebutton.Text = "SAVE" Then 
      Dim Query As String 

      Dim con As MySqlConnection = New MySqlConnection(ServerString) 
      con.Open() 

      Query = "UPDATE branch SET BranchName = '" & txtbranchname.Text & "' WHERE BranchCode = '" & txtbranchcode.Text & "'" 


      Dim cmd As MySqlCommand = New MySqlCommand(Query, con) 
      Dim i As Integer = cmd.ExecuteNonQuery() 
      If (i > 0) Then 

       'success 
       Dim Successtext As New MsgSuccess 
       Successtext.PassedText = "Record is Successfully Updated" 
       Successtext.ShowDialog() 


       Dim SQLStatement As String 
       logdate = Convert.ToDateTime(Date.Now).ToString("yyyy-MM-dd hh:mm:ss") 
       logdate2 = Format(Date.Now, "yyyy-MM-dd") 
       status = "Updated Branch: " + txtbranchcode.Text + ", " + txtbranchname.Text 
       SQLStatement = "INSERT INTO log(EmployeeID,Name,EmployeePosition,Date,DateTime,Status)VALUES('" & profile.lblemployeenum.Text & "','" & profile.lblemployeename.Text & "','" & Main.lbldate.Text & "','" & logdate2 & "','" & logdate & "','" & status & "')" 
       Savelog(SQLStatement) 

       srchTextBox.Clear() 
       con.Close() 

      Else 
       'error 
       Dim Errortext As New Msgerror 
       Errortext.PassedText = "Record is not Updated" 
       Errortext.ShowDialog() 



      End If 


     End If 
    Else 
     Dim Errortext As New Msgerror 
     Errortext.PassedText = "All Entries with * must be filled" 
     Errortext.ShowDialog() 

    End If 
End Sub 
+0

을 레이블에 할당하거나 자신의 클래스를 만드는 것이 창조 고려해야은 개인이고, 당신이해야 그런 식으로 유지하면 각 레이블마다 하나씩 컨트롤의 텍스트 값을 노출하는 3 개의 공용 속성을 작성해야합니다. –

답변

0

그냥 폼의 이름에서 컨트롤을 추가 :

Form2.lblemployeename.Text 
Form2.lblemployeenum.Text 
Form2.lblEmpPosition.Text 

을 나를 위해, VS2005와 VB.NET 2.0, 컨트롤은 Friend을 만들어집니다. 양식 디자이너를 확인하고 다른 양식에서 사용할 수 있도록 Public 또는 Friend (및 필요한 경우 With Events)에 컨트롤을 배치하십시오.

+0

나는 그것을 시도했지만 intellisense에 표시되지 않습니다. – Harvey

+0

@ user2083771 기본적으로 공개가 아니기 때문입니다. –

+0

@ShadowWizard 방금 새 프로젝트에서 시도해 보았고 기본적으로 'Friend'선언을 했으므로 =로 작동합니다. VS2005와 .NET 2.0을 사용합니다. – SysDragon

0

먼저 form1에 form2의 인스턴스를 만듭니다.

Dim secondform As New Form2 

form2에서 세 라벨의 '수정 자'속성으로 이동하여 public으로 변경하십시오.

그런 다음 form1에 변수를 설정하여 다음과 같은 레이블 값을 얻을 수 있습니다. 당신이 당신의 양식 (Dim profile As New ProfileControl)의 인스턴스를 생성하는 것처럼

Dim a As String = secondform.lblemployeename.Text 
Dim b As String = secondform.lblemployeenum.Text 
Dim c As String = secondform.lblEmpPosition.Text 

이 'A', 'B'와 'C'레이블

+0

값이 변경되거나 a, b, c가 항상 첫 번째 값을 유지하려면 값을 업데이트해야합니다. – SysDragon

+0

좋아, 그랬어.하지만 그게 왜야? – Harvey

+0

그 때 작동 했나요? OP가 소팅을 잘하는 것. 나는 그가 부탁 한 것을 성취 할 수있는 길을 제시했다. – Jacooobley

0

의 값을 확인해야합니다 외모와 당신은 자신에 액세스하려고 값을 제어합니다. ProfileControl을 이미 만들었습니까?

어쨌든 ProfileControl이 양식 인 경우 Load 이벤트는 양식을로드 할 때 (양식 표시시)에만 실행되므로 레이블 값이로드되지 않습니다.

양식을 이미 표시하는 경우 해당 인스턴스를 만들고 레이블에 액세스하기 위해 표시 한 양식 이름을 사용하지 마십시오.

양식을 표시되지 않는 경우,이 값은 나중에 다른 변수와 양식의 컨트롤 때문에 등,

+0

내 실수로 죄송합니다. ProfileControl은 폼이 아니라 usercontrol입니다. – Harvey

+0

예 양식을 이미 표시하고 있지만 인스턴스를 만들지 않고 레이블에 어떻게 액세스 할 수 있습니까? – Harvey

관련 문제