Я создаю пользовательский элемент управления, где, когда пользователь нажимает кнопку, появляется всплывающее окно с информацией. Всплывающее окно управляется toolStripDropDown, поэтому, когда оно появляется, оно делает 2 вещи
- Не перемещает другие элементы управления в форме, а отображает над ними
- что он может отображать детали за пределами самого пользовательского элемента управления без необходимости заранее резервировать пространство
Вот код
Public Class Popup
Private treeViewHost As ToolStripControlHost
Private Shadows dropDown As ToolStripDropDown
Public Sub New()
InitializeComponent()
Dim treeView As New TreeView()
treeView.BorderStyle = BorderStyle.None
treeViewHost = New ToolStripControlHost(treeView)
treeViewHost.Padding = New Padding(6)
dropDown = New ToolStripDropDown()
dropDown.AutoClose = False
dropDown.AutoSize = True
dropDown.BackColor = Color.LemonChiffon
dropDown.Items.Add(treeViewHost)
End Sub
Public Sub ShowDropDown()
If dropDown.Visible = False Then
dropDown.Show(Me, Button1.Left + Button1.Height + 5, Button1.Top)
Else
dropDown.Close()
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ShowDropDown()
End Sub
Private Sub Popup_Move(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Move, Button1.Move
If (dropDown IsNot Nothing AndAlso Button1 IsNot Nothing AndAlso dropDown.Visible) Then
dropDown.Left = Button1.Left + Button1.Height + 5
dropDown.Top = Button1.Top
End If
End Sub
End Class
А вот и инициализация управления
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(4, 4)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(27, 23)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"
Me.Button1.UseVisualStyleBackColor = True
'
'Popup
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Controls.Add(Me.Button1)
Me.Name = "Popup"
Me.Size = New System.Drawing.Size(39, 35)
Me.ResumeLayout(False)
End Sub
Friend WithEvents Button1 As System.Windows.Forms.Button
Теперь моя проблема в том, как форма перемещается или изменяет размеры. Tooldropdown не перемещается относительно. Я это понимаю. Когда я пытаюсь захватить событие перемещения пользовательского элемента управления, это событие не срабатывает, когда перемещается вся форма. Должно быть что-то, что я могу захватить, потому что элементы управления в контейнере формы перемещаются относительно, что движет этим? Я пробовал wndproc, но во время перемещения формы ничего не запускается, если форма не перекрашена.
Спасибо
Текущий код в VB, но я могу справиться с обоими.