2016-11-25 118 views
0

我想這是一個簡單的問題,但我在這裏研究了其他相關主題,這些主題對我來說並不適用,所以在這裏。 通過按下Form2中的特定按鈕,Form1出現,然後按Form1中的按鈕必須按下Form2中的按鈕並顯示一條消息。我不想使用具有全局變量的模塊,因爲我已經完成了它這條路。有沒有辦法獲得Form1的特定實例而不是新的?在2類是在不同的.vb文件,這裏是代碼:如何在Visual Basic中按下另一個窗體上的按鈕來按下窗體上的按鈕

Public Class Form2 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles form2Btn1.Click 
    MsgBox("") 
End Sub 

Private Sub form2Btn2_Click(sender As Object, e As EventArgs) Handles form2Btn2.Click 
    Dim newForm1 As New Form1 
    newForm1.ShowDialog() 

End Sub 
End Class 

併爲Form1的代碼:在Form1中替補

Public Class Form1 
    Private Sub form1Btn_Click(sender As Object, e As EventArgs) Handles form1Btn.Click 
    Dim newForm2 As New Form2 
    newForm2.form2Btn1.PerformClick() 

End Sub 
End Class 
+0

click事件中的'Form2'對象是不一樣的窗口2爲不露對話 - 你需要將它傳遞('我')的對話框,也許在構造函數 – Plutonix

+0

感謝您的答案,是的,這是我的問題,如何採取相同的形式的實例。 –

回答

0

將窗體控件或其事件處理程序暴露給其他類不是很好的做法。但是你可以製作同樣的工作人員的公共方法,然後從其他表單中調用它。
您的解決方案的主要想法是將已存在/正確的Form2實例傳遞給Form1,正如@Plutonix在註釋中所建議的那樣。

因此,首先從0123_click eventhandler_中將公共方法的邏輯提取出來。

Public Class Form2 
    Public Sub ShowMessage() 
     MsgBox("") 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles form2Btn1.Click 
     ShowMessage() ' call the method here 
    End Sub 

    Private Sub form2Btn2_Click(sender As Object, e As EventArgs) Handles form2Btn2.Click 
     'Form implements IDisposable interface so 
     'it is good practice to wrap that instance with Using statement 
     Using newForm1 As New Form1(Me) 
      newForm1.ShowDialog() 
     End using 
    End Sub 
End Class 

創建Form1構造函數採用此實例作爲參數

Public Class Form1 
    Private ReadOnly _Form1Instance As Form1 

    Public Sub New(form1Instance As Form1) 
     _Form1Instance = form1instance; 
    End Sub 

    Private Sub form1Btn_Click(sender As Object, e As EventArgs) Handles form1Btn.Click 
     'Use instance of Form2 passed through constructor for calling public method 
     _Form1Instance.ShowMessage() 
    End Sub 
End Class 
+0

謝謝,我會做這樣的事情,我認爲這是最好的實踐 –

0

脫光專用的,也就是說

Public Class Form2 
Sub Button1_Click(sender As Object, e As EventArgs) Handles form2Btn1.Click 
    MsgBox("") 
End Sub 

Sub form2Btn2_Click(sender As Object, e As EventArgs) Handles form2Btn2.Click 
    Dim newForm1 As New Form1 
    newForm1.ShowDialog() 
End Sub 
End Class 

因此在Form1上你可以做類似於

Public Class Form1 
    Private Sub form1Btn_Click(sender As Object, e As EventArgs) Handles form1Btn.Click 
    Dim newForm2 As New Form2 
    newForm2.Button1_Click(Nothing, Nothing) 

End Sub 
End Class 
+0

謝謝你的答案,它的工作原理,但我真的不想改變私人狀態按鈕 –

+0

@法比奧的方式將在這種情況下爲你工作 –