从单击表单1,vb.net上的按钮调用表单2中的方法时遇到问题

时间:2013-05-19 18:50:14

标签: .net xml vb.net visual-studio-2010 methods

我有一个用于创建时间表的程序,当通过单击表单1上的按钮加载保存的时间表时,数据加载到表单2,然后调用表单2中的方法将数据打印到表单3。问题是在调用Form2.Print()之后,如果我打开它,表单2上没有数据,但仍然可以将数据打印到表单3.如果我删除Form2.Print(),则数据加载到表单2上然后,我可以单击“打印”按钮,如果我再次打开表单2,则数据仍在文本框中。注意:理想情况下,我只是将数据从表单1上的“打开”按钮单击事件发送到表单2和表单3,但表单2上的Print()方法对程序执行了许多操作,而不仅仅是打印使其更容易在Open打开点击中调用它而不是复制它。提前感谢您的帮助。干杯!

表格1 Code

    Private Sub Open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Open.Click
        Dim xmldoc As XmlDocument
        Dim nodelist As XmlNodeList
        Dim node As XmlNode
        Dim objForm2 As Object = Form2 

        xmldoc = New XmlDocument()
        xmldoc.Load("C:\time.xml")
        nodelist = xmldoc.SelectNodes("/Timesheet/Job1")

        For Each node In nodelist
            Dim CustName = node.ChildNodes.Item(0).InnerText
            Form2.txtbxCustName.Text = CustName
            Dim WO = node.ChildNodes.Item(1).InnerText
            Form2.txtbxWONum.Text = WO
        Next

        objForm2.Print()
    End Sub

`

表格2 Code

    Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
        Print()
    End Sub

    Public Sub Print()
        Form3.labelCustName.text = txtbxCustName.text
        Form3.labelWOnum.text = txtbxWOnum.text
        Me.Close()
    End Sub

2 个答案:

答案 0 :(得分:1)

无需将Form2转换为对象,然后调用print。从表单的新实例中,您将直接调用它。并且每次为每个块内部的文本框分配新值。 实现你想要的你可以做很多方法而不是我将用texbox对象显示的String个对象。

在Form2和Form3类中添加

   Public Property xmldata as String 'use your own class or other types List  controls(textbox,.)whatever you want . 

    'You have to do inside open click
    Dim form2 as new Form2()  

如果您只想初始化form2和form3一次并在整个程序中使用它,那么您应该添加此行以防止在closing()

处理
     Private Sub Form2_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
             Me.Hide()
             e.Cancel = True
     End Sub 


     form2.xmldata=yourxmldata
     form2.print()
     form2.show()'show form2

现在可以帮助你。如果不是,我会重复我的回答,以便你明白

答案 1 :(得分:0)

为这两个标签创建公共变量..

将新模块添加到项目中并将其添加到项目中     public sCustName,sWONum as String

并更改您的Form2 Print()..

Public Sub Print()
    Form3.labelCustName.text = txtbxCustName.text
    sCustName = txtbxCustName.text
    Form3.labelWOnum.text = txtbxWOnum.text
    sWONum = txtbxWOnum.text
    Me.Close()
End Sub

因此,如果您需要重新填写表格2,那么

Form2.txtbxCustName.Text = sCustName
Form2.txtbxWONum.Text = sWONum