Это похоже на взлом, но это работает (вроде) (извините, vb.net не c #):
Public Class UserControl2
Private Sub tsMainMenu_BeginDrag(ByVal sender As Object, ByVal e As System.EventArgs) Handles tsMainMenu.BeginDrag
tsMainMenu.Tag = tsMainMenu.Parent
End Sub
Private Sub ToolStrip1_EndDrag(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsMainMenu.EndDrag
If Not tsMainMenu.Parent.Parent.Equals(CType(tsMainMenu.Tag, ToolStripPanel).Parent) Then
CType(ToolStrip1.Tag, ToolStripPanel).Controls.Add(tsMainMenu)
End If
End Sub
End Class
Проще говоря; после завершения перетаскивания элемента управления, если его родительский ToolStripContainer отличается от того, который был при перетаскивании, переместите панель инструментов обратно туда, где она была.
Я уверен, что это может быть свернуто в элемент управления, так что вам не нужно писать его для каждой панели инструментов.
Edit:
Вы можете поместить весь этот код в элемент управления, который наследуется от ToolStripContainer, и заставить его выполнять всю работу за вас, что означает хорошее инкапсулированное решение.