I am having a problem adding a PopupMenuTool to an already existing PopupMenuTool. I am unable to post the code that I am using but I will try to explain.
I have an UltraWinGrid object (myWinGrid)
I have an UltraToolbarsManager object (mTBMgr).
I have a PopupMenuTool popMenu7 = new PopupMenuTool ("gridPopup").
- the popMenu7 PopupMenuTool contains a bunch of buttons
popMenu7.Tools.AddRange ( ToolBase[] { buttonTool40, buttonTool41, .....});
- the popMenu7 PopupMenuTool is added to the UltraToolbarsManager object
mTBMgr.Tools.AddRange ( ToolBase[] { button50, popMenu7 , button 51,.....} );
(All of this is logic is in the InitializeComponent method of my form)
I have a event handler to handle the OnMouseUp event for the grid (myWinGrid). Here is the code for that event
protected void myWinGridOnMouseUp(sender, e)
{
if (e.Button.Eqauls(MouseButton.Right)
PopupMenuTool contextMenu = mTBMgr.Tools["gridPopup"] as PopupMenuTool ;
PopupMenuTool newContext = new PopupMenuTool("Columns");
newContext.SharedProps.Caption = "Columns";
mTBMgr.Tools.Add(newContext );
contextMenu.Tools.AddTool("Columns");
contextMenu.ShowPopup();
}
When I run this code, the "Columns" popup menu is not displaying in the popMenu7 menu. If I step through the code and I examine the contents of the mTBMgr and popMenu7, the "Columns" popup menu exists in the Tools collection but it is not displaying.
We have 2 versions of Infragistics at our Company, version 8 (8.1.20081.1000) and version 10 (10.1.20101.1007). The code I have listed above works when I use version 8 of Infragistics but it does not work when I use version 10 of Infragistics.
Dominik, there is no need to disable merging to get this to work. If you are using a merged toolbars manager and you add tools to PopupMenuTools defined on the child, you must call RefreshMerge() on either the parent of child managers. The parent will not track changes in the child to update merged tools when changes occur.
@tronoski.
Just for curiosity. Are you using a MDI child with merged toolbars?
We have a similar behavior as long as this.UltraToolbarsManager1.MdiMergeable = True (default) is set. When we switch to this.UltraToolbarsManager1.MdiMergeable = False in child form Form_Load event then the dynamic context shows up.
I can't reproduce the problem. I've attached a sample that I think demonstrates what you described, except I applied the context menu to the Form instead of a grid. Am I missing something?
OK, I tried modifying the e.Tool property in the BeforeToolDropdown event and it did not work. Here is what I did:
In the Form_Load event, I set
mToolbarsManager.SetContextMenuUltra(this, "gridPopup");
- "gridPopup" represents popMenu7 which I mentioned in a previous Post.
In the InitializeComponent method I create an event handler to handle the BeforeToolDropdown event
mToolbarsManager.BeforeToolDropDown += new BeforeToolDropDownEventHandler(mToolbarsManager_BeforeToolDropdown)
In the mToolbarsManager_BeforeToolDropdown event I have the following code:
PopupMenuTool newContext = new PopupMenuTool ("Columns");
mToolbarsManager.Tools.AddRange( new Infragistics.Win.UltraWinToolbars.ToolBase[] { newContext });
(e.Tool as PopupMenuTool ).Tools.AddTool("Columns");
When I run this code, the Context menu (PopupMenu --> popMenu7) does not contain the new "Columns" PopupMenu. When I step through the debugger, the "Columns" PopupMenu appears in the mToolbarsManager.Tools collection but it is not being displayed. Can you modify e.Tool to add in a new PopupMenu? Do you have any ideas on how I can accomplish what I want to accomplish?
You shouldn't be creating an instance of popMenu7 in the BeforeToolDropdown event. You should be adding tools to the e.Tool property on the event args if it is popMenu7 and e.SourceControl is your grid control. That will tell you that the grid was right-clicked. Of course, you will need to cast e.Tool to a PopupMenuTool so you can access the Tools collection and add tools to it.