Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WinForms / System / WinForms / Design / TemplateNodeContextMenu.cs / 1 / TemplateNodeContextMenu.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Windows.Forms.Design { using System.Design; using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System; using System.Security; using System.Security.Permissions; using System.Collections; using System.ComponentModel.Design; using System.Windows.Forms; using System.Drawing; using System.Drawing.Design; using System.Windows.Forms.Design; using System.Windows.Forms.Design.Behavior; ////// Custom ContextMenu section for ToolStripMenuItems. /// internal class TemplateNodeCustomMenuItemCollection : CustomMenuItemCollection { private ToolStripItem currentItem; private IServiceProvider serviceProvider; private ToolStripMenuItem insertToolStripMenuItem; public TemplateNodeCustomMenuItemCollection(IServiceProvider provider, Component currentItem): base() { this.serviceProvider = provider; this.currentItem = currentItem as ToolStripItem; PopulateList(); } ////// Immediate parent /// - can be ToolStrip if the Item is on the toplevel /// private ToolStrip ParentTool { get { return currentItem.Owner; } } private void PopulateList() { this.insertToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.insertToolStripMenuItem.Text = SR.GetString(SR.ToolStripItemContextMenuInsert); this.insertToolStripMenuItem.DropDown = ToolStripDesignerUtils.GetNewItemDropDown(ParentTool, currentItem, new EventHandler(AddNewItemClick), false, serviceProvider); this.Add(insertToolStripMenuItem); } private void AddNewItemClick(object sender, EventArgs e) { ItemTypeToolStripMenuItem senderItem = (ItemTypeToolStripMenuItem)sender; Type t = senderItem.ItemType; // we are inserting a new item.. InsertItem(t); } // INSERT LOGIC ...... private void InsertItem(Type t) { InsertToolStripItem(t); } ////// Insert Item into ToolStrip. /// // Standard 'catch all - rethrow critical' exception pattern [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] [SuppressMessage("Microsoft.Security", "CA2102:CatchNonClsCompliantExceptionsInGeneralHandlers")] private void InsertToolStripItem(Type t) { IDesignerHost designerHost = (IDesignerHost)serviceProvider.GetService(typeof(IDesignerHost)); Debug.Assert(designerHost != null, "Why didn't we get a designer host?"); ToolStrip parent = ParentTool; int dummyIndex = parent.Items.IndexOf(currentItem); IDesigner designer = null; DesignerTransaction newItemTransaction = designerHost.CreateTransaction(SR.GetString(SR.ToolStripAddingItem)); try { // turn off Adding/Added events listened to by the ToolStripDesigner... ToolStripDesigner._autoAddNewItems = false; // the code in ComponentAdded will actually get the add done. // IComponent component = designerHost.CreateComponent(t); designer = designerHost.GetDesigner(component); if (designer is ComponentDesigner) { ((ComponentDesigner)designer).InitializeNewComponent(null); } //Set the Image property and DisplayStyle... if (component is ToolStripButton || component is ToolStripSplitButton || component is ToolStripDropDownButton) { Image image = null; try { image = new Bitmap(typeof(ToolStripButton), "blank.bmp"); } catch (Exception e) { if (ClientUtils.IsCriticalException(e)) { throw; } } PropertyDescriptor imageProperty = TypeDescriptor.GetProperties(component)["Image"]; Debug.Assert(imageProperty != null, "Could not find 'Image' property in ToolStripItem."); if (imageProperty != null && image != null) { imageProperty.SetValue(component, image); } PropertyDescriptor dispProperty = TypeDescriptor.GetProperties(component)["DisplayStyle"]; Debug.Assert(dispProperty != null, "Could not find 'DisplayStyle' property in ToolStripItem."); if (dispProperty != null) { dispProperty.SetValue(component, ToolStripItemDisplayStyle.Image); } PropertyDescriptor imageTransProperty = TypeDescriptor.GetProperties(component)["ImageTransparentColor"]; Debug.Assert(imageTransProperty != null, "Could not find 'DisplayStyle' property in ToolStripItem."); if (imageTransProperty != null) { imageTransProperty.SetValue(component, Color.Magenta); } } Debug.Assert(dummyIndex != -1, "Why is the index of the Item negative?"); parent.Items.Insert(dummyIndex, (ToolStripItem)component); // set the selection to our new item.. since we destroyed Original component.. // we have to ask SelectionServive from new Component ISelectionService selSvc = (ISelectionService)serviceProvider.GetService(typeof(ISelectionService)); if (selSvc != null) { selSvc.SetSelectedComponents(new object[] { component }, SelectionTypes.Replace); } } catch (Exception ex) { if (newItemTransaction != null) { newItemTransaction.Cancel(); newItemTransaction = null; } if (ClientUtils.IsCriticalException(ex)) { throw; } } finally { if (newItemTransaction != null) { newItemTransaction.Commit(); newItemTransaction = null; } // turn off Adding/Added events listened to by the ToolStripDesigner... ToolStripDesigner._autoAddNewItems = true; // Add the glyphs if the parent is DropDown. ToolStripDropDown parentDropDown = parent as ToolStripDropDown; if (parentDropDown != null && parentDropDown.Visible) { ToolStripDropDownItem ownerItem = parentDropDown.OwnerItem as ToolStripDropDownItem; if (ownerItem != null) { ToolStripMenuItemDesigner itemDesigner = designerHost.GetDesigner(ownerItem) as ToolStripMenuItemDesigner; if (itemDesigner != null) { itemDesigner.ResetGlyphs(ownerItem); } } } } } // END LOGIC } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BuildDependencySet.cs
- DuplicateWaitObjectException.cs
- XmlDataSource.cs
- DataStreams.cs
- ContravarianceAdapter.cs
- SqlBulkCopy.cs
- ExpressionPrefixAttribute.cs
- Visual3DCollection.cs
- ObjectComplexPropertyMapping.cs
- HttpStreamXmlDictionaryReader.cs
- QueryAccessibilityHelpEvent.cs
- MultiTrigger.cs
- DataBindEngine.cs
- StoreContentChangedEventArgs.cs
- SingleResultAttribute.cs
- UriScheme.cs
- WsatEtwTraceListener.cs
- BaseProcessor.cs
- JournalNavigationScope.cs
- SizeAnimationClockResource.cs
- Rect3DValueSerializer.cs
- TriggerActionCollection.cs
- OdbcErrorCollection.cs
- TableChangeProcessor.cs
- CapabilitiesSection.cs
- AssemblyBuilder.cs
- ObjectQuery.cs
- GZipDecoder.cs
- HttpClientCertificate.cs
- ReaderWriterLockWrapper.cs
- ContextMarshalException.cs
- CheckBoxStandardAdapter.cs
- EntityTypeBase.cs
- LookupBindingPropertiesAttribute.cs
- TransformedBitmap.cs
- JavaScriptSerializer.cs
- GenerateScriptTypeAttribute.cs
- SplitterPanel.cs
- DbParameterHelper.cs
- TabControlAutomationPeer.cs
- TimeSpanConverter.cs
- CultureInfoConverter.cs
- SkewTransform.cs
- PagesSection.cs
- OracleConnectionStringBuilder.cs
- URLIdentityPermission.cs
- String.cs
- OLEDB_Enum.cs
- ResourceDictionary.cs
- PointConverter.cs
- OleDbSchemaGuid.cs
- SqlClientWrapperSmiStreamChars.cs
- ColumnMapTranslator.cs
- KeyNotFoundException.cs
- SplitterPanel.cs
- SerializationInfo.cs
- UnmanagedMemoryStreamWrapper.cs
- AdPostCacheSubstitution.cs
- HandleCollector.cs
- ConfigurationFileMap.cs
- SessionState.cs
- RawStylusInputCustomData.cs
- CellTreeNode.cs
- DiffuseMaterial.cs
- WizardStepBase.cs
- AuditLog.cs
- HttpModulesSection.cs
- BCryptHashAlgorithm.cs
- EntityModelBuildProvider.cs
- HttpListenerContext.cs
- ClientTarget.cs
- PropertyGrid.cs
- Path.cs
- NominalTypeEliminator.cs
- OdbcTransaction.cs
- DataGridColumnsPage.cs
- HostElement.cs
- SelectionProviderWrapper.cs
- DocumentAutomationPeer.cs
- SHA256Cng.cs
- CriticalFinalizerObject.cs
- SecurityPolicySection.cs
- Logging.cs
- SetterTriggerConditionValueConverter.cs
- XhtmlBasicValidationSummaryAdapter.cs
- MediaEntryAttribute.cs
- UnsafeNativeMethods.cs
- DesignOnlyAttribute.cs
- Cursor.cs
- DragEventArgs.cs
- RtType.cs
- NonBatchDirectoryCompiler.cs
- ContentOnlyMessage.cs
- CDSsyncETWBCLProvider.cs
- AlignmentYValidation.cs
- ActivitiesCollection.cs
- FlowDocumentPaginator.cs
- DragEvent.cs
- MultipartIdentifier.cs
- SQLGuidStorage.cs