2016-11-25 1 views
0

간단한 질문이지만 여기서는 나에게 도움이되지 않은 다른 관련 주제에 대해 조사했습니다. Form2의 특정 단추를 누르면 Form1이 나타나고 Form1의 단추를 누르면 Form2의 단추를 누르고 메시지를 표시해야합니다. 전역 변수가있는 모듈을 사용하고 싶지 않습니다. 이 방법. Form1의 특정 인스턴스를 가져오고 새 인스턴스를 가져 오는 방법이 있습니까?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의 코드 :

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

- 당신은'(를 전달해야 Me') 대화 상자에 아마도 생성자 – Plutonix

+0

답을 주셔서 감사합니다. 제 문제는 양식의 동일한 인스턴스를 가져 오는 방법입니다. –

답변

0

양식의 컨트롤이나 이벤트 처리기를 다른 클래스에 노출하는 것은 좋지 않습니다. 그러나 당신은 같은 직원을하는 공공 방법을 만들 수 있고, 다른 형태로부터 그것을 부를 수 있습니다.
해결책의 주된 아이디어는 @Plutonix에서 제안한대로 Form2의 존재/올바른 인스턴스를 Form1으로 전달하는 것입니다.

그래서 먼저 로직을 button_click 이벤트 핸들러에서 Form1으로 추출하여 public 메소드에 전달하십시오. 매개 변수로이 경우 소요

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의 생성자를 만들기 클릭 이벤트의`Form2` 개체가 대화 상자를 보여 주었다 것과 같은 Form2를하지

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

스트립 민간 오프를 Form1 잠수정에서, 즉

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 
2 개 개의 클래스가 다른 된 .vb 파일에, 여기에 코드입니다

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

@ Fabio의 방법은이 경우에 당신을 위해 작동합니다. –

관련 문제