2016-08-27 1 views
0

Form1에 단추가있는 Form2가 열립니다. Form2의 다른 단추를 클릭하면이 양식이 분할 컨테이너의 Form1 패널에 컨트롤로 추가됩니다. 그런 다음 양식을 닫지 만 분할 된 컨테이너 컨트롤은 여전히 ​​표시됩니다 (Form2). 이제 반대쪽을 수행하고 싶습니다. 분할 컨테이너 컨트롤을 닫고 Form2를 이전과 마찬가지로 일반 창으로 열려면 Form2의 동일한 단추 (이 경우 분할 컨테이너의 패널에있는 컨트롤)에서 다시 엽니 다. 이것이 가능한가 ?패널에 도킹 폼을 누른 다음 도킹 해제하기 동일한 양식에서

내 주된 목적은 분할 컨테이너에 Form2를 도킹하고 Form2의 단추를 사용하여 도킹을 해제하는 것입니다.

편집 :

Public Class Form2 

    Dim BtnState As Integer 
    Dim frm As Form2 

    Private Shared Sub DockFormToPanel(panel As Panel, frm As Form) 
     frm.TopLevel = False 
     frm.WindowState = FormWindowState.Maximized 
     frm.FormBorderStyle = FormBorderStyle.None 
     frm.Visible = True 
     Form1.SplitContainer1.Panel2.Controls.Add(frm) 
    End Sub 

    Private Shared Sub UndockFormFromPanel(panel As Panel, frm As Form) 
     If Not Form1.SplitContainer1.Panel2.Controls.Contains(frm) Then Throw New InvalidOperationException() 
     Form1.SplitContainer1.Panel2.Controls.Remove(frm) 
     frm.Visible = False 
     frm.TopLevel = True 
     frm.WindowState = FormWindowState.Normal 
     frm.FormBorderStyle = FormBorderStyle.Sizable 
     frm.Show() 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     If BtnState = 0 Then 
      If frm Is Nothing Then 
       frm = New Form2 
       AddHandler frm.FormClosed, Sub() frm = Nothing 
      End If 
      DockFormToPanel(Form1.SplitContainer1.Panel2, frm) 
      BtnState = 1 
     Else 
      UndockFormFromPanel(Form1.SplitContainer1.Panel2, frm) 
      BtnState = 0 
     End If 

    End Sub 

End Class 

답변

0

를 해결 여기 내 코드입니다. 누군가가 더 나은 해결책을 가지고 있거나 이것이 좋은 방법이 아니라고 생각한다면 의견을 말하십시오. 다음은 최종 코드입니다 (Form2).

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     Dim frm As New Form2 

     If Form1.DataGridView1.Visible = True Then 

      Form1.DataGridView1.Visible = False 
      frm.TopLevel = False 
      Form1.SplitContainer1.Panel2.Controls.Add(frm) 
      frm.WindowState = FormWindowState.Maximized 
      frm.FormBorderStyle = FormBorderStyle.None 
      frm.Show() 
      Me.Close() 

     Else 

      Me.Parent = Nothing 
      Form1.DataGridView1.Visible = True 
      frm.TopLevel = True 
      frm.FormBorderStyle = FormBorderStyle.Sizable 
      frm.WindowState = FormWindowState.Normal 
      frm.StartPosition = FormStartPosition.CenterScreen 
      frm.Show() 

     End If 

End Sub 
관련 문제