2013-02-18 4 views
2

Это не работает, метки только возвращаются к значениям по умолчанию. Как вы думаете, в чем проблема?Получение значения метки из другой формы с помощью vb.net

Хорошо это мой код:

На самом деле я использую MySQL в моей базе данных здесь

Это форма, которая генерирует значения меток:

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 

И это форма, которая будет извлекать значения трех меток.

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 

Для меня, в VB.NET 2.0 с VS2005, элементы управления создаются Friend. Проверьте конструктора формы и поместите свои элементы управления на Public или FriendWith Events, если вам это нужно), чтобы использовать их из других форм.

+0

Я пробовал, но он не отображается в intellisense. – Harvey

+0

@ user2083771 потому что по умолчанию он не является общедоступным. –

+0

@ShadowWizard Я просто пытался использовать новый проект и его объявленный «Друг» по умолчанию, поэтому он работает = /. Я использую VS2005 и .NET 2.0 – SysDragon

0

Во-первых, создайте экземпляр вашей формы2 в форме1.

Dim secondform As New Form2 

На вашей форме2 перейдите к свойствам «модификаторов» ваших трех ярлыков и измените их на общедоступные.

Затем вы можете установить переменные в form1, чтобы получить значение меток следующим образом;

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

Это должно сделать «A», «B» и «с» Значение этикеток

+0

Вы должны обновить значения, если они меняются, или a, b, c всегда будет поддерживать первое значение. – SysDragon

+0

Хорошо, я сделал это, но почему это так? – Harvey

+0

Неужели это работало? Хорошо, что для ОП разобраться. Я дал способ достичь того, что он попросил. – Jacooobley

0

Похоже, вы создаете экземпляр вашей формы (Dim profile As New ProfileControl), а затем вы пытаетесь получить доступ к его контролирует значения. У вас уже есть ProfileControl?

В любом случае, если ProfileControl является формой, событие Load будет выполняться только тогда, когда форма загружается (когда вы показываете форму), поэтому значения для этикеток не загружаются.

Если вы уже показываете форму, не создавайте этот экземпляр и используйте имя формы, которое вы показывали для доступа к меткам.

Если вы не показываете форму, вы должны рассмотреть вопрос о создании, что значения в других переменных, а затем назначить его на этикетки или создать свой собственный класс и т.д.

+0

Извините за мою ошибку ProfileControl - это не форма, а пользовательский контроль. – Harvey

+0

Да, я уже показываю форму, но как получить доступ к ярлыкам без создания этого экземпляра? – Harvey

Смежные вопросы