2013-02-18 68 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 

這是該表單將檢索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個公共屬性,每個標籤對應一個公開屬性,以公開控件的文本值。 – 2013-02-18 15:42:49

回答

0

單從形式的名稱添加控件:

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

對於我來說,在VB.NET 2.0 VS2005,對照創建Friend。檢查表單設計師並將您的控件放在PublicFriend(和With Events,如果您需要的話)以便從其他表單使用它們。

+0

我試過了,但它沒有顯示在智能感知中。 – Harvey 2013-02-18 15:43:57

+0

@ user2083771,因爲默認情況下它不是Public。 – 2013-02-18 15:45:25

+0

@ShadowWizard我剛剛嘗試從一個新的項目和默認聲明的'朋友',所以它的作品= /。我使用VS2005和.NET 2.0 – SysDragon 2013-02-18 15:47:42

0

首先,在form1中創建form2的一個實例。

Dim secondform As New Form2 

在form2上,轉到三個標籤的「修飾符」屬性並將其更改爲public。

然後,您可以在form1中設置變量以獲取標籤的值,如下所示;

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 2013-02-18 15:50:53

+0

好吧我已經這麼做了,但是爲什麼呢? – Harvey 2013-02-18 15:51:53

+0

它是否工作呢?那麼OP爲了理清。我已經給出了一個方法來實現他所要求的。 – Jacooobley 2013-02-18 15:52:24

0

的價值看起來你正在創建表單(Dim profile As New ProfileControl)的一個實例,然後您嘗試訪問他控制值。你沒有ProfileControl已經創建?

無論如何,如果ProfileControl是一個表單,則Load事件將只在表單加載時(當您顯示錶單時)執行,因此標籤的值沒有被加載。

如果您已經顯示錶單,請不要創建該實例並使用您顯示的表單名稱來訪問標籤。

如果沒有顯示形式,你應該考慮創建一個在另一個變量,後來值將其分配到標籤或創建自己的類等

+0

對不起,我的錯誤ProfileControl不是一種形式,而是一個用戶控件。 – Harvey 2013-02-18 16:58:20

+0

是的我已經顯示了表單,但是如何在不創建該實例的情況下訪問標籤? – Harvey 2013-02-18 17:03:46

相關問題