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

相关问题