2016-03-01 75 views
0

在下面的代碼(由LarsTech - drag and detach tabpages )的幫助下,我能夠分離一個tabpage並將其放置到一個新的表單。但是,當我關閉該表單時,拖動的tabpage不會返回到其原始位置。 如果有人能幫助我編程,那就太棒了!VB.NET - 選項卡控制 - 拖動和分離標籤

Private Sub TabControl1_MouseMove(sender As Object, e As MouseEventArgs) Handles TabControl1.MouseMove 
    If (e.Button = MouseButtons.Left) Then 
     TabControl1.DoDragDrop(TabControl1.SelectedTab, DragDropEffects.Move) 
    End If 
End Sub 

Private Sub TabControl1_GiveFeedback(sender As Object, e As GiveFeedbackEventArgs) Handles TabControl1.GiveFeedback 
    e.UseDefaultCursors = False 
End Sub 

Private Sub TabControl1_QueryContinueDrag(sender As Object, e As QueryContinueDragEventArgs) Handles TabControl1.QueryContinueDrag 
    If Control.MouseButtons <> MouseButtons.Left Then 
     e.Action = DragAction.Cancel 
     Dim f As New Form 
     f.Size = New Size(400, 300) 
     f.StartPosition = FormStartPosition.Manual 
     f.Location = MousePosition 
     Dim tc As New TabControl 
     tc.Dock = DockStyle.Fill 
     tc.TabPages.Add(TabControl1.SelectedTab) 
     f.Controls.Add(tc) 
     f.Show() 
     Me.Cursor = Cursors.Default 
    Else 
     e.Action = DragAction.Continue 
     Me.Cursor = Cursors.Help 
    End If 
End Sub 
+0

你爲什麼期望它這樣做?如果你期望發生這種情況,那麼你必須編寫代碼來做到這一點。你已經有了移動一個'TabPage'的代碼,所以你可以適應它,但是你還必須記住它來自哪裏,以便之後你可以把它放回去。 – jmcilhinney

+0

對不起,我想我沒有說清楚。我知道該代碼並不假設將Tabpage返回到其原始位置。我無法生成可以完成這項任務的代碼,這就是我需要幫助的。 – SinghSolutions

+0

正如我所說,你已經知道如何將「TabPage」從一個地方移動到另一個地方,因爲你已經在做這件事了。您將有兩個選項可以將其移回。首先,您可以讓原始窗體處理第二個窗體的FormClosed事件並將「TabPage」拉回。其次,你可以讓第二種形式保留對第一種形式的「TabControl」的引用並將其推回。 – jmcilhinney

回答

0

我已經能夠產生代碼,當窗體關閉時返回到原來的位置,但頁面不會返回到原始索引位置。以下是更新的代碼:

Public f As Form 

Private Sub TabControl1_MouseMove(sender As Object, e As MouseEventArgs) Handles TabControl1.MouseMove 
    If (e.Button = MouseButtons.Left) Then 
     TabControl1.DoDragDrop(TabControl1.SelectedTab, DragDropEffects.Move) 
    End If 
End Sub 

Private Sub TabControl1_GiveFeedback(sender As Object, e As GiveFeedbackEventArgs) Handles TabControl1.GiveFeedback 
    e.UseDefaultCursors = False 
End Sub 

Private Sub TabControl1_QueryContinueDrag(sender As Object, e As QueryContinueDragEventArgs) Handles TabControl1.QueryContinueDrag 
    f = New Form 
    If Control.MouseButtons <> MouseButtons.Left Then 
     e.Action = DragAction.Cancel 
     AddHandler f.FormClosing, AddressOf ClosingDraggableWindow_EventHandler 
     f.Size = New Size(400, 300) 
     f.Name = TabControl1.SelectedTab.Text 
     f.TabIndex = TabControl1.SelectedTab.TabIndex 
     f.StartPosition = FormStartPosition.Manual 
     f.Location = MousePosition 
     Dim tc As New TabControl() 
     tc.Dock = DockStyle.Fill 
     tc.TabPages.Add(TabControl1.SelectedTab) 
     f.Controls.Add(tc) 
     f.Show() 
    End If 
End Sub 

Sub ClosingDraggableWindow_EventHandler() 
    Dim tbp As New TabPage() 
    tbp.Text = f.Name 
    Dim tbc As TabControl = f.Controls(0) 
    Dim tbp2 As TabPage = tbc.TabPages(0) 
    TabControl1.TabPages.Insert(f.TabIndex + 1, tbp2) 
End Sub