2016-08-27 26 views
0

Form1でForm2をボタンで開きます。 Form2の別のボタンをクリックすると、このフォームが分割されたコンテナのForm1パネルのコントロールとして追加されます。その後、私はフォームを閉じますが、分割されたコンテナコントロールは引き続き表示されます(私のForm2)。今度は、逆のコンテナコントロールを閉じて、前のようにForm2を通常のウィンドウに開きます。これはForm2の同じボタンから、この場合は分割されたコンテナのパネル内のコントロールから行います。これは可能ですか?パネルにフォームをドッキングしてからドッキング解除する同じフォームから

私の主な目的は、分割されたコンテナにForm2をドッキングして、Form2上のボタンからすべてをドッキングすることです。

EDIT:

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 
関連する問題