Seles
asked on
SubMenu by Right-Clicking the Mouse
I am trying to make a submenu appear
when the mouse was right-clicked.
Just like Right-Clicking some objects
on the desktop, a submenu will appear.
P.S.
Additional points will be offered for
excellent answer
when the mouse was right-clicked.
Just like Right-Clicking some objects
on the desktop, a submenu will appear.
P.S.
Additional points will be offered for
excellent answer
basically what you do is create a menu as you normally would using the menu editor...such as
File
Save
Open
except you make the File menu item invisible by unchecking its visible property box in the menu editor. Now for any object you want the popup menu to show up on, you use that object's mousedown event...so for a form:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then _
PopupMenu mnuFile
End Sub
where mnuFile is the name you gave the File menu option in your menu editor
File
Save
Open
except you make the File menu item invisible by unchecking its visible property box in the menu editor. Now for any object you want the popup menu to show up on, you use that object's mousedown event...so for a form:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then _
PopupMenu mnuFile
End Sub
where mnuFile is the name you gave the File menu option in your menu editor
you dont have to make the menu invisible but generally when creatin a pop up menu its a menu you dont see across the top of your form...of course it is entirely up to you however
One thing to note is that if you do make the main menu item invisible you have to be careful that there is an actual visible submenu item when you Popupmenu <Whatever>.
I manage the visibility of all the submenus based on what is being right clicked and sometimes no submenu's will actually be visible and you'll get an error if that happens.
My solution was to just do all my checks.. and figure out if anything would be visible and if nothing would be I just exit sub at that point.
I manage the visibility of all the submenus based on what is being right clicked and sometimes no submenu's will actually be visible and you'll get an error if that happens.
My solution was to just do all my checks.. and figure out if anything would be visible and if nothing would be I just exit sub at that point.
One thing these other answers did not mention is how to pop up a "sub menu"
Let's say your menu looks like this:
Edit (mnuEdit)
Insert |> (mnuEditInsert)
Picture (mnuEditInsertPicture)
Text (mnuEditInsertText)
Edit is a Main menu (it shows up on the menu bar) and Insert is a Sub Menu.
If you say:
PopupMenu mnuEdit
Then you'll get a square menu box with one item on it: Insert |>
and if the user clicks the arrow then they get the cascading menu.
However if you wanted to display the Insert Sub Menu then you could say:
PopupMenu mnuEditInsert
Then you'll get a square menu box with the items "Picture" and "Text" in it.
One more thing to note. By default the menu appears under the mouse, which is generally what you want to do, but you can also specify the X and Y positions of the mouse after the name of the menu if you want the menu to appear someplace else on the screen:
PopupMenu mnuEdit, 100, 100
Let's say your menu looks like this:
Edit (mnuEdit)
Insert |> (mnuEditInsert)
Picture (mnuEditInsertPicture)
Text (mnuEditInsertText)
Edit is a Main menu (it shows up on the menu bar) and Insert is a Sub Menu.
If you say:
PopupMenu mnuEdit
Then you'll get a square menu box with one item on it: Insert |>
and if the user clicks the arrow then they get the cascading menu.
However if you wanted to display the Insert Sub Menu then you could say:
PopupMenu mnuEditInsert
Then you'll get a square menu box with the items "Picture" and "Text" in it.
One more thing to note. By default the menu appears under the mouse, which is generally what you want to do, but you can also specify the X and Y positions of the mouse after the name of the menu if you want the menu to appear someplace else on the screen:
PopupMenu mnuEdit, 100, 100
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
liugian...welcome to EE...it is customary here to simply post comments rather than answers...especially when there have already been comments posted that your answer does nothing more than reiterate. the questioner can accept a comment as an answer at any time.
liuqian changed the proposed answer to a comment
ASKER
I am sorry that I accept the answer so late. My Problem is I was not familiar with "MenuEditor" and the command "PopupMenu". Now I did.
The Key of problem is
PopupMenu menuname,flags,x,y,boldnam e
Thanks for all comments.
I will share pts as below.
liuqian 100 (accepted as ANS)
TimCottee 100 (pls ans dummy Question)
AzraSound 100 (pls ans dummy question)
The Key of problem is
PopupMenu menuname,flags,x,y,boldnam
Thanks for all comments.
I will share pts as below.
liuqian 100 (accepted as ANS)
TimCottee 100 (pls ans dummy Question)
AzraSound 100 (pls ans dummy question)
Here is a simple form file in ascii format that you can paste into a new file called frmMenu using Notepad.
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.Menu mnuPopup
Caption = "Right-Click Menu"
Visible = 0 'False
Begin VB.Menu mnuPopup1
Caption = "Option &1"
End
Begin VB.Menu mnuPopup2
Caption = "Option &2"
End
Begin VB.Menu mnuPopup3
Caption = "Option &3"
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub mnuPopup1_Click()
MsgBox "Option 1 Clicked"
End Sub
Private Sub mnuPopup2_Click()
MsgBox "Option 2 Clicked"
End Sub
Private Sub mnuPopup3_Click()
MsgBox "Option 3 Clicked"
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu mnuPopup
End If
End Sub
Basically you create a menu using the menu editor in the VB IDE. Then using the form_mousedown event (or a control's mousedown event) test for right-click (button = 2) and use the popupmenu method to display the menu that you have created.
Hope this helps, get back if you need anything more.