|
Imports System.Drawing
Imports System.ComponentModel
Namespace System.Windows.Forms
<DesignerCategoryAttribute("Code")> _
Public Class ContextMenuEx : Inherits ContextMenuStrip
Private _OpenClickLocation As Point
Public Sub New()
End Sub
Public Sub New(ByVal container As IContainer)
MyBase.New(container)
End Sub
Public ReadOnly Property OpenClickLocation() As Point
Get
Return _OpenClickLocation
End Get
End Property
Protected Overrides Sub OnOpened(ByVal e As EventArgs)
If SourceControl IsNot Nothing Then
_OpenClickLocation = _
SourceControl.PointToClient(Control.MousePosition)
End If
MyBase.OnOpened(e)
End Sub
End Class
End Namespace
Public Class frmContextMenuExTester
Private Sub frmContextMenuExTester_Load(ByVal sender As Object, _
ByVal e As EventArgs) Handles MyBase.Load
Me.Location = Screen.PrimaryScreen.WorkingArea.Location
TreeView1.ExpandAll()
End Sub
Private Sub TreeviewMenuItem_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles btAddNode.Click, btDeleteNode.Click
Dim nd As TreeNode = TreeView1.GetNodeAt(TreeviewMenu.OpenClickLocation)
Select Case True
Case sender Is btAddNode
Dim Nodes = If(nd Is Nothing, TreeView1.Nodes, nd.Nodes)
Nodes.Add("NewNode")
If nd IsNot Nothing Then nd.Expand()
Case sender Is btDeleteNode
If nd Is Nothing Then Return
Dim Nodes = If(nd.Parent Is Nothing, _
TreeView1.Nodes, nd.Parent.Nodes)
Nodes.Remove(nd)
End Select
End Sub
Private Sub ListboxMenuItem_Click(ByVal sender As Object, _
ByVal e As EventArgs) _
Handles btListItemUp.Click, btListItemDown.Click, _
btRemoveListItem.Click, btInsertListItem.Click
Dim Items = ListBox1.Items
Dim indx As Integer = _
ListBox1.IndexFromPoint(ListboxMenu.OpenClickLocation)
Select Case True
Case sender Is btInsertListItem
Static count As Integer = 0
Items.Insert(If(indx < 0, Items.Count, indx), "NewItem" & count)
count += 1
Case sender Is btRemoveListItem
If indx < 0 Then Return
Items.RemoveAt(indx)
Case sender Is btListItemUp
If indx < 1 Then Return
Dim itm = Items(indx)
Items.RemoveAt(indx)
Items.Insert(indx - 1, itm)
Case sender Is btListItemDown
If indx < 0 OrElse indx = Items.Count - 1 Then Return
Dim itm = Items(indx)
Items.RemoveAt(indx)
Items.Insert(indx + 1, itm)
End Select
End Sub
End Class |