2016-03-01 71 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