سلام مجدد.
من از طریق WndProc برای PopupMenu به نتیجه نرسیدم و از روشی که بصورت اصولی هست استفاده کردم (متاسفانه )
برای نمایش منو بصورت Popup یا همون ContextMenu از تابع TrackPopupMenu از توابع API استفاده می شه:
Private Declare Function TrackPopupMenu Lib "user32" (
ByVal hMenu As Long,
ByVal wFlags As Long,
ByVal X As Long,
ByVal Y As Long,
ByVal nReserved As Long,
ByVal hwnd As Long,
ByVal lprc As Long) As Integer
حالا منو از هرکجا اومده باشه چه ریسورس یک DLL یا از خود پروژه Handle از اون نیاز هست و برای برگردوندن آی.دی آیتم کلیک شده پارامتر ورودی wFlags باید TPM_RETURNCMD ست بشه که آی.دی رو برگردونه:
Private Const TPM_RETURNCMD = &H100&
برای استفاده از تابع TrackPopupMenu من یک تابع دیگه ساختم که اون ورودی رو بصورت پیشفرض داره و با کلیک روی آیتم های منو آی.دی آیتم رو بر می گردونه و اگر آیتمی انتخاب نشده باشه 0 بر می گردونه و می شه بعد از استفاده از این تابع مشروط بر اینکه آی.دی بیشتر از صفر باشه رویداد یا دستورات ما اجرا بشه:
Public Function TrackPopupMenu(hMenu As IntPtr,
ByVal p As System.Drawing.Point,
ByVal hwnd As Long) As Integer
Return TrackPopupMenu(hMenu, TPM_RETURNCMD, p.X, p.Y, 0, hwnd, 0)
End Function
این هم برای استفاده از تابع و اجرای دستور بعد از کلیک آیتم های منو که طبق آی.دی مد نظرتون می تونید براش دستور بنویسید:
در رویداد MouseUp از شیء:
Private Sub Parent_MouseUp(sender As Object, e As MouseEventArgs) Handles Parent.MouseUp
Dim MenuID As Integer = 0
If e.Button = MouseButtons.Right Then
MenuID = rs.TrackPopupMenu(PopupMenu, Control.MousePosition, CType(sender, Control).Handle)
If MenuID > 0 Then
MsgBox(MenuID.ToString)
End If
End If
End Sub