Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ToolStripDropDownButton.cs / 1305376 / ToolStripDropDownButton.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System; using System.Collections; using System.ComponentModel; using System.Drawing; using Microsoft.Win32; using System.Drawing.Imaging; using System.Threading; using System.Diagnostics; using System.Windows.Forms.ButtonInternal; using System.Windows.Forms.Layout; using System.Security.Permissions; using System.Security; using System.Windows.Forms.Design; ////// /// A ToolStripButton that can display a popup. /// [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)] public class ToolStripDropDownButton : ToolStripDropDownItem { private bool showDropDownArrow = true; private byte openMouseId = 0; ////// /// Constructs a ToolStripButton that can display a popup. /// public ToolStripDropDownButton() { Initialize(); } public ToolStripDropDownButton(string text):base(text,null,(EventHandler)null) { Initialize(); } public ToolStripDropDownButton(Image image):base(null,image,(EventHandler)null) { Initialize(); } public ToolStripDropDownButton(string text, Image image):base(text,image,(EventHandler)null) { Initialize(); } public ToolStripDropDownButton(string text, Image image, EventHandler onClick):base(text,image,onClick) { Initialize(); } public ToolStripDropDownButton(string text, Image image, EventHandler onClick, string name) :base(text,image,onClick,name){ Initialize(); } public ToolStripDropDownButton(string text, Image image, params ToolStripItem[] dropDownItems):base(text,image,dropDownItems) { Initialize(); } [DefaultValue(true)] public new bool AutoToolTip { get { return base.AutoToolTip; } set { base.AutoToolTip = value; } } protected override bool DefaultAutoToolTip { get { return true; } } ///[ DefaultValue(true), SRDescription(SR.ToolStripDropDownButtonShowDropDownArrowDescr), SRCategory(SR.CatAppearance) ] public bool ShowDropDownArrow { get { return showDropDownArrow; } set { if (showDropDownArrow != value) { showDropDownArrow = value; this.InvalidateItemLayout(PropertyNames.ShowDropDownArrow); } } } /// /// Creates an instance of the object that defines how image and text /// gets laid out in the ToolStripItem /// internal override ToolStripItemInternalLayout CreateInternalLayout() { return new ToolStripDropDownButtonInternalLayout(this); } protected override ToolStripDropDown CreateDefaultDropDown() { // AutoGenerate a Winbar DropDown - set the property so we hook events return new ToolStripDropDownMenu(this, /*isAutoGenerated=*/true); } ////// Called by all constructors of ToolStripButton. /// private void Initialize() { SupportsSpaceKey = true; } ////// /// Overriden to invoke displaying the popup. /// protected override void OnMouseDown(MouseEventArgs e) { if ((Control.ModifierKeys != Keys.Alt) && (e.Button == MouseButtons.Left)) { if (DropDown.Visible) { ToolStripManager.ModalMenuFilter.CloseActiveDropDown(DropDown, ToolStripDropDownCloseReason.AppClicked); } else { // opening should happen on mouse down. Debug.Assert(ParentInternal != null, "Parent is null here, not going to get accurate ID"); openMouseId = (ParentInternal == null) ? (byte)0: ParentInternal.GetMouseId(); this.ShowDropDown(/*mousePush =*/true); } } base.OnMouseDown(e); } protected override void OnMouseUp(MouseEventArgs e) { if ((Control.ModifierKeys != Keys.Alt) && (e.Button == MouseButtons.Left)) { Debug.Assert(ParentInternal != null, "Parent is null here, not going to get accurate ID"); byte closeMouseId = (ParentInternal == null) ? (byte)0: ParentInternal.GetMouseId(); if (closeMouseId != openMouseId) { openMouseId = 0; // reset the mouse id, we should never get this value from toolstrip. ToolStripManager.ModalMenuFilter.CloseActiveDropDown(DropDown, ToolStripDropDownCloseReason.AppClicked); Select(); } } base.OnMouseUp(e); } protected override void OnMouseLeave(EventArgs e) { openMouseId = 0; // reset the mouse id, we should never get this value from toolstrip. base.OnMouseLeave(e); } ////// /// Inheriting classes should override this method to handle this event. /// protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { if (this.Owner != null) { ToolStripRenderer renderer = this.Renderer; Graphics g = e.Graphics; renderer.DrawDropDownButtonBackground(new ToolStripItemRenderEventArgs(e.Graphics, this)); if ((DisplayStyle & ToolStripItemDisplayStyle.Image) == ToolStripItemDisplayStyle.Image) { renderer.DrawItemImage(new ToolStripItemImageRenderEventArgs(g, this, InternalLayout.ImageRectangle)); } if ((DisplayStyle & ToolStripItemDisplayStyle.Text) == ToolStripItemDisplayStyle.Text) { renderer.DrawItemText(new ToolStripItemTextRenderEventArgs(g, this, this.Text, InternalLayout.TextRectangle, this.ForeColor, this.Font, InternalLayout.TextFormat)); } if (ShowDropDownArrow) { ToolStripDropDownButton.ToolStripDropDownButtonInternalLayout layout = InternalLayout as ToolStripDropDownButtonInternalLayout; Rectangle dropDownArrowRect = (layout != null) ? layout.DropDownArrowRect :Rectangle.Empty; Color arrowColor = Enabled ? SystemColors.ControlText : SystemColors.ControlDark; renderer.DrawArrow(new ToolStripArrowRenderEventArgs(g, this,dropDownArrowRect, arrowColor, ArrowDirection.Down)); } } } ///[UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.AllWindows)] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] // 'charCode' matches control.cs protected internal override bool ProcessMnemonic(char charCode) { // checking IsMnemonic is not necesssary - toolstrip does this for us. if (HasDropDownItems) { Select(); ShowDropDown(); return true; } return false; } internal class ToolStripDropDownButtonInternalLayout : ToolStripItemInternalLayout { private ToolStripDropDownButton ownerItem; private static Size dropDownArrowSize = new Size(5,3); private static Padding dropDownArrowPadding = new Padding(2); private Rectangle dropDownArrowRect = Rectangle.Empty; public ToolStripDropDownButtonInternalLayout(ToolStripDropDownButton ownerItem) : base(ownerItem) { this.ownerItem = ownerItem; } public override Size GetPreferredSize(Size constrainingSize) { Size preferredSize = base.GetPreferredSize(constrainingSize); if (ownerItem.ShowDropDownArrow) { if (ownerItem.TextDirection == ToolStripTextDirection.Horizontal) { preferredSize.Width += DropDownArrowRect.Width + dropDownArrowPadding.Horizontal; } else { preferredSize.Height += DropDownArrowRect.Height + dropDownArrowPadding.Vertical; } } return preferredSize; } protected override ToolStripItemLayoutOptions CommonLayoutOptions() { ToolStripItemLayoutOptions options = base.CommonLayoutOptions(); if (ownerItem.ShowDropDownArrow) { if (ownerItem.TextDirection == ToolStripTextDirection.Horizontal) { // We're rendering horizontal.... make sure to take care of RTL issues. int widthOfDropDown = dropDownArrowSize.Width + dropDownArrowPadding.Horizontal; options.client.Width -= widthOfDropDown; if (ownerItem.RightToLeft == RightToLeft.Yes) { // if RightToLeft.Yes: [ v | rest of drop down button ] options.client.Offset(widthOfDropDown, 0); dropDownArrowRect = new Rectangle(dropDownArrowPadding.Left,0, dropDownArrowSize.Width, ownerItem.Bounds.Height); } else { // if RightToLeft.No [ rest of drop down button | v ] dropDownArrowRect = new Rectangle(options.client.Right,0, dropDownArrowSize.Width, ownerItem.Bounds.Height); } } else { // else we're rendering vertically. int heightOfDropDown = dropDownArrowSize.Height + dropDownArrowPadding.Vertical; options.client.Height -= heightOfDropDown; // [ rest of button / v] dropDownArrowRect = new Rectangle(0,options.client.Bottom + dropDownArrowPadding.Top, ownerItem.Bounds.Width-1, dropDownArrowSize.Height); } } return options; } public Rectangle DropDownArrowRect { get { return dropDownArrowRect; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebContext.cs
- OleCmdHelper.cs
- CAGDesigner.cs
- WebPartConnectionsCancelVerb.cs
- MultipleViewPattern.cs
- Focus.cs
- WebPartsPersonalizationAuthorization.cs
- DataGridViewElement.cs
- WindowsListViewScroll.cs
- PopupRoot.cs
- Psha1DerivedKeyGenerator.cs
- UIntPtr.cs
- TextRangeSerialization.cs
- Message.cs
- XmlEventCache.cs
- MessageEnumerator.cs
- DataContract.cs
- QueryServiceConfigHandle.cs
- Renderer.cs
- NestPullup.cs
- DbgUtil.cs
- PartialTrustValidationBehavior.cs
- RemotingServices.cs
- AdapterDictionary.cs
- SecurityHeaderTokenResolver.cs
- InfoCardTraceRecord.cs
- Constraint.cs
- FunctionDetailsReader.cs
- WindowsListViewItem.cs
- InkCollectionBehavior.cs
- DataGridTablesFactory.cs
- MouseGestureValueSerializer.cs
- HandlerWithFactory.cs
- ContentElement.cs
- ThaiBuddhistCalendar.cs
- ValueSerializer.cs
- SurrogateEncoder.cs
- BitmapEffect.cs
- LoginCancelEventArgs.cs
- Int16KeyFrameCollection.cs
- ResourceProviderFactory.cs
- TextDpi.cs
- HtmlUtf8RawTextWriter.cs
- DynamicObject.cs
- RepeaterItemCollection.cs
- ComponentChangedEvent.cs
- HttpProcessUtility.cs
- ConfigurationManagerInternalFactory.cs
- TakeQueryOptionExpression.cs
- Content.cs
- ScrollItemProviderWrapper.cs
- PersistenceProvider.cs
- ResourcesBuildProvider.cs
- PtsPage.cs
- DecimalKeyFrameCollection.cs
- DataGridViewTopRowAccessibleObject.cs
- Button.cs
- GridViewAutomationPeer.cs
- NotSupportedException.cs
- TemplateXamlParser.cs
- LocationEnvironment.cs
- XmlSchemaSimpleTypeList.cs
- RegexFCD.cs
- AudioStateChangedEventArgs.cs
- RecipientInfo.cs
- SqlDataSourceStatusEventArgs.cs
- ReceiveActivityDesigner.cs
- CatalogZoneBase.cs
- MenuScrollingVisibilityConverter.cs
- TemplatedAdorner.cs
- LayoutTableCell.cs
- GeometryDrawing.cs
- CorrelationInitializer.cs
- DockingAttribute.cs
- BamlTreeMap.cs
- WebPartConnectionsEventArgs.cs
- DirectoryLocalQuery.cs
- XsltFunctions.cs
- ClassImporter.cs
- Column.cs
- ControlBindingsCollection.cs
- Mappings.cs
- WebZone.cs
- GiveFeedbackEventArgs.cs
- MobileFormsAuthentication.cs
- Canvas.cs
- FixedSOMElement.cs
- ImageInfo.cs
- ConnectionPoint.cs
- WindowsHyperlink.cs
- ipaddressinformationcollection.cs
- RewritingValidator.cs
- DbXmlEnabledProviderManifest.cs
- SimpleBitVector32.cs
- IPPacketInformation.cs
- MetadataItem.cs
- PropertyDescriptorGridEntry.cs
- RectangleGeometry.cs
- FixedPageStructure.cs
- TraceSource.cs