Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / WinForms / Managed / System / WinForms / Design / EventsTab.cs / 1 / EventsTab.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms.Design { using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System; using System.ComponentModel.Design; using System.Windows.Forms; using System.Windows.Forms.Design; using System.Collections; using Microsoft.Win32; ////// /// [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.InheritanceDemand, Name="FullTrust")] [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name="FullTrust")] public class EventsTab : PropertyTab { private IServiceProvider sp; private IDesignerHost currentHost; private bool sunkEvent; ///Provides a tab on the property browser to display events for selection and linking. ////// /// public EventsTab(IServiceProvider sp){ this.sp = sp; } ///Initializes a new instance of the ///class. /// /// public override string TabName { get { return SR.GetString(SR.PBRSToolTipEvents); } } ///Gets or sets the name of the tab. ////// /// public override string HelpKeyword { get { return "Events"; // do not localize. } } // override this to reject components you don't want to support. ///Gets or sets the help keyword for the tab. ////// /// public override bool CanExtend(Object extendee) { return !Marshal.IsComObject(extendee); } private void OnActiveDesignerChanged(object sender, ActiveDesignerEventArgs adevent){ currentHost = adevent.NewDesigner; } ///Gets a value indicating whether the specified object can be extended. ////// /// public override PropertyDescriptor GetDefaultProperty(object obj) { IEventBindingService eventPropertySvc = GetEventPropertyService(obj, null); if (eventPropertySvc == null) { return null; } // Find the default event. Note that we rely on GetEventProperties caching // the property to event match, so we can == on the default event. // We assert that this always works. // EventDescriptor defEvent = TypeDescriptor.GetDefaultEvent(obj); if (defEvent != null) { return eventPropertySvc.GetEventProperty(defEvent); } return null; } private IEventBindingService GetEventPropertyService(object obj, ITypeDescriptorContext context) { IEventBindingService eventPropertySvc = null; if (!sunkEvent){ IDesignerEventService des = (IDesignerEventService)sp.GetService(typeof(IDesignerEventService)); if (des != null){ des.ActiveDesignerChanged += new ActiveDesignerEventHandler(this.OnActiveDesignerChanged); } sunkEvent = true; } if (eventPropertySvc == null && currentHost != null) { eventPropertySvc = (IEventBindingService)currentHost.GetService(typeof(IEventBindingService)); } if (eventPropertySvc == null && obj is IComponent){ ISite site = ((IComponent)obj).Site; if (site != null) { eventPropertySvc = (IEventBindingService)site.GetService(typeof(IEventBindingService)); } } if (eventPropertySvc == null && context != null) { eventPropertySvc = (IEventBindingService)context.GetService(typeof(IEventBindingService)); } return eventPropertySvc; } ///Gets the default property from the specified object. ////// /// public override PropertyDescriptorCollection GetProperties(object component, Attribute[] attributes) { return GetProperties(null, component, attributes); } ///Gets all the properties of the tab. ////// /// public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object component, Attribute[] attributes) { //Debug.Assert(component != null, "Can't get properties for a null item!"); IEventBindingService eventPropertySvc = GetEventPropertyService(component, context); if (eventPropertySvc == null) { return new PropertyDescriptorCollection(null); } EventDescriptorCollection events = TypeDescriptor.GetEvents(component, attributes); PropertyDescriptorCollection realEvents = eventPropertySvc.GetEventProperties(events); // Add DesignerSerializationVisibilityAttribute.Content to attributes to see if we have any. Attribute[] attributesPlusNamespace = new Attribute[attributes.Length + 1]; Array.Copy(attributes, 0, attributesPlusNamespace, 0, attributes.Length); attributesPlusNamespace[attributes.Length] = DesignerSerializationVisibilityAttribute.Content; // If we do, then we traverse them to see if they have any events under the current attributes, // and if so, we'll show them as top-level properties so they can be drilled down into to get events. PropertyDescriptorCollection namespaceProperties = TypeDescriptor.GetProperties(component, attributesPlusNamespace); if (namespaceProperties.Count > 0) { ArrayList list = null; for (int i = 0; i < namespaceProperties.Count; i++) { PropertyDescriptor nsProp = namespaceProperties[i]; TypeConverter tc = nsProp.Converter; if (!tc.GetPropertiesSupported()) { continue; } Object namespaceValue = nsProp.GetValue(component); EventDescriptorCollection namespaceEvents = TypeDescriptor.GetEvents(namespaceValue, attributes); if (namespaceEvents.Count > 0) { if (list == null) { list = new ArrayList(); } // make this non-mergable // nsProp = TypeDescriptor.CreateProperty(nsProp.ComponentType, nsProp, MergablePropertyAttribute.No); list.Add(nsProp); } } // we've found some, so add them to the event list. if (list != null) { PropertyDescriptor[] realNamespaceProperties = new PropertyDescriptor[list.Count]; list.CopyTo(realNamespaceProperties, 0); PropertyDescriptor[] finalEvents = new PropertyDescriptor[realEvents.Count + realNamespaceProperties.Length]; realEvents.CopyTo(finalEvents, 0); Array.Copy(realNamespaceProperties, 0, finalEvents, realEvents.Count, realNamespaceProperties.Length); realEvents = new PropertyDescriptorCollection(finalEvents); } } return realEvents; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //Gets the properties of the specified component... ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms.Design { using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System; using System.ComponentModel.Design; using System.Windows.Forms; using System.Windows.Forms.Design; using System.Collections; using Microsoft.Win32; ////// /// [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.InheritanceDemand, Name="FullTrust")] [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name="FullTrust")] public class EventsTab : PropertyTab { private IServiceProvider sp; private IDesignerHost currentHost; private bool sunkEvent; ///Provides a tab on the property browser to display events for selection and linking. ////// /// public EventsTab(IServiceProvider sp){ this.sp = sp; } ///Initializes a new instance of the ///class. /// /// public override string TabName { get { return SR.GetString(SR.PBRSToolTipEvents); } } ///Gets or sets the name of the tab. ////// /// public override string HelpKeyword { get { return "Events"; // do not localize. } } // override this to reject components you don't want to support. ///Gets or sets the help keyword for the tab. ////// /// public override bool CanExtend(Object extendee) { return !Marshal.IsComObject(extendee); } private void OnActiveDesignerChanged(object sender, ActiveDesignerEventArgs adevent){ currentHost = adevent.NewDesigner; } ///Gets a value indicating whether the specified object can be extended. ////// /// public override PropertyDescriptor GetDefaultProperty(object obj) { IEventBindingService eventPropertySvc = GetEventPropertyService(obj, null); if (eventPropertySvc == null) { return null; } // Find the default event. Note that we rely on GetEventProperties caching // the property to event match, so we can == on the default event. // We assert that this always works. // EventDescriptor defEvent = TypeDescriptor.GetDefaultEvent(obj); if (defEvent != null) { return eventPropertySvc.GetEventProperty(defEvent); } return null; } private IEventBindingService GetEventPropertyService(object obj, ITypeDescriptorContext context) { IEventBindingService eventPropertySvc = null; if (!sunkEvent){ IDesignerEventService des = (IDesignerEventService)sp.GetService(typeof(IDesignerEventService)); if (des != null){ des.ActiveDesignerChanged += new ActiveDesignerEventHandler(this.OnActiveDesignerChanged); } sunkEvent = true; } if (eventPropertySvc == null && currentHost != null) { eventPropertySvc = (IEventBindingService)currentHost.GetService(typeof(IEventBindingService)); } if (eventPropertySvc == null && obj is IComponent){ ISite site = ((IComponent)obj).Site; if (site != null) { eventPropertySvc = (IEventBindingService)site.GetService(typeof(IEventBindingService)); } } if (eventPropertySvc == null && context != null) { eventPropertySvc = (IEventBindingService)context.GetService(typeof(IEventBindingService)); } return eventPropertySvc; } ///Gets the default property from the specified object. ////// /// public override PropertyDescriptorCollection GetProperties(object component, Attribute[] attributes) { return GetProperties(null, component, attributes); } ///Gets all the properties of the tab. ////// /// public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object component, Attribute[] attributes) { //Debug.Assert(component != null, "Can't get properties for a null item!"); IEventBindingService eventPropertySvc = GetEventPropertyService(component, context); if (eventPropertySvc == null) { return new PropertyDescriptorCollection(null); } EventDescriptorCollection events = TypeDescriptor.GetEvents(component, attributes); PropertyDescriptorCollection realEvents = eventPropertySvc.GetEventProperties(events); // Add DesignerSerializationVisibilityAttribute.Content to attributes to see if we have any. Attribute[] attributesPlusNamespace = new Attribute[attributes.Length + 1]; Array.Copy(attributes, 0, attributesPlusNamespace, 0, attributes.Length); attributesPlusNamespace[attributes.Length] = DesignerSerializationVisibilityAttribute.Content; // If we do, then we traverse them to see if they have any events under the current attributes, // and if so, we'll show them as top-level properties so they can be drilled down into to get events. PropertyDescriptorCollection namespaceProperties = TypeDescriptor.GetProperties(component, attributesPlusNamespace); if (namespaceProperties.Count > 0) { ArrayList list = null; for (int i = 0; i < namespaceProperties.Count; i++) { PropertyDescriptor nsProp = namespaceProperties[i]; TypeConverter tc = nsProp.Converter; if (!tc.GetPropertiesSupported()) { continue; } Object namespaceValue = nsProp.GetValue(component); EventDescriptorCollection namespaceEvents = TypeDescriptor.GetEvents(namespaceValue, attributes); if (namespaceEvents.Count > 0) { if (list == null) { list = new ArrayList(); } // make this non-mergable // nsProp = TypeDescriptor.CreateProperty(nsProp.ComponentType, nsProp, MergablePropertyAttribute.No); list.Add(nsProp); } } // we've found some, so add them to the event list. if (list != null) { PropertyDescriptor[] realNamespaceProperties = new PropertyDescriptor[list.Count]; list.CopyTo(realNamespaceProperties, 0); PropertyDescriptor[] finalEvents = new PropertyDescriptor[realEvents.Count + realNamespaceProperties.Length]; realEvents.CopyTo(finalEvents, 0); Array.Copy(realNamespaceProperties, 0, finalEvents, realEvents.Count, realNamespaceProperties.Length); realEvents = new PropertyDescriptorCollection(finalEvents); } } return realEvents; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.Gets the properties of the specified component... ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Int32CAMarshaler.cs
- SemaphoreFullException.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- AssemblyCache.cs
- _HeaderInfoTable.cs
- HeaderedItemsControl.cs
- DbProviderFactories.cs
- FloaterBaseParaClient.cs
- Permission.cs
- _HTTPDateParse.cs
- ValidationSummaryDesigner.cs
- XsltContext.cs
- RegistryPermission.cs
- BufferedResponseStream.cs
- DataBindingCollection.cs
- FixedSOMTableCell.cs
- TypeLoadException.cs
- TableLayoutPanel.cs
- TextEditor.cs
- DiagnosticTrace.cs
- WCFModelStrings.Designer.cs
- PolyBezierSegmentFigureLogic.cs
- DecimalStorage.cs
- SystemResourceHost.cs
- XsltCompileContext.cs
- DataGridItemCollection.cs
- ListSurrogate.cs
- SEHException.cs
- RegisteredExpandoAttribute.cs
- PropertyGrid.cs
- BitmapEffectGroup.cs
- PersistChildrenAttribute.cs
- SessionStateContainer.cs
- SectionInput.cs
- PowerStatus.cs
- Matrix.cs
- Char.cs
- ListCommandEventArgs.cs
- HelloMessageApril2005.cs
- OleDbDataAdapter.cs
- DataGridViewHeaderCell.cs
- Win32PrintDialog.cs
- CodeCompileUnit.cs
- CheckPair.cs
- CompilationRelaxations.cs
- InputBuffer.cs
- RoutedEventConverter.cs
- ErrorTableItemStyle.cs
- QuadTree.cs
- QueryGeneratorBase.cs
- XmlUnspecifiedAttribute.cs
- IDictionary.cs
- VisualTreeUtils.cs
- HttpResponseHeader.cs
- HttpHandlerActionCollection.cs
- _OverlappedAsyncResult.cs
- CurrentChangingEventManager.cs
- ImageBrush.cs
- DbgCompiler.cs
- XPathChildIterator.cs
- Double.cs
- BrowserDefinitionCollection.cs
- NumericExpr.cs
- ADMembershipProvider.cs
- HttpProtocolReflector.cs
- ComponentResourceKeyConverter.cs
- InternalCache.cs
- GradientBrush.cs
- SizeAnimation.cs
- SessionPageStatePersister.cs
- HttpProfileBase.cs
- PointAnimationClockResource.cs
- Psha1DerivedKeyGenerator.cs
- XamlReader.cs
- ObjectRef.cs
- InvokeProviderWrapper.cs
- DataViewListener.cs
- Attributes.cs
- UnmanagedBitmapWrapper.cs
- DiscreteKeyFrames.cs
- TransformGroup.cs
- LocatorPart.cs
- recordstatescratchpad.cs
- LinkArea.cs
- SimpleTextLine.cs
- AssemblyBuilderData.cs
- HtmlInputButton.cs
- ServiceDocument.cs
- BasicViewGenerator.cs
- PageHandlerFactory.cs
- PeerNameResolver.cs
- HtmlInputRadioButton.cs
- DrawListViewSubItemEventArgs.cs
- RunWorkerCompletedEventArgs.cs
- StringUtil.cs
- ProtocolsSection.cs
- DeploymentSectionCache.cs
- DuplexSecurityProtocolFactory.cs
- CssTextWriter.cs
- SettingsAttributes.cs