Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / ToolStripDropDownButton.cs / 1 / 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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GeneralTransform3DTo2DTo3D.cs
- InstanceLockedException.cs
- _ListenerRequestStream.cs
- DeviceContext.cs
- wmiutil.cs
- ConfigurationLocation.cs
- DebugHandleTracker.cs
- SHA1.cs
- HwndMouseInputProvider.cs
- WindowsFormsHost.cs
- SelectionListComponentEditor.cs
- RequestUriProcessor.cs
- StaticExtension.cs
- HttpContext.cs
- ResourceBinder.cs
- CodeObject.cs
- PresentationAppDomainManager.cs
- MarshalByValueComponent.cs
- HttpCacheParams.cs
- AxHost.cs
- ColorTransform.cs
- NavigationWindow.cs
- StorageScalarPropertyMapping.cs
- Parser.cs
- ApplicationSettingsBase.cs
- SystemIPAddressInformation.cs
- ServiceKnownTypeAttribute.cs
- DrawingContextWalker.cs
- UrlAuthFailureHandler.cs
- ParserExtension.cs
- RayMeshGeometry3DHitTestResult.cs
- MetabaseServerConfig.cs
- AssemblyCollection.cs
- TransformationRules.cs
- PartManifestEntry.cs
- Compensate.cs
- SimpleParser.cs
- SpecularMaterial.cs
- PreloadedPackages.cs
- AssociatedControlConverter.cs
- HandledEventArgs.cs
- RuntimeWrappedException.cs
- LeaseManager.cs
- InstanceView.cs
- BitmapSourceSafeMILHandle.cs
- RegexMatch.cs
- StorageComplexPropertyMapping.cs
- ContractMethodParameterInfo.cs
- FunctionImportElement.cs
- configsystem.cs
- SerializationObjectManager.cs
- MethodImplAttribute.cs
- InArgument.cs
- DataGridBoundColumn.cs
- DrawToolTipEventArgs.cs
- TemplateNodeContextMenu.cs
- RIPEMD160Managed.cs
- DrawingCollection.cs
- QueryGeneratorBase.cs
- CreateParams.cs
- FixedNode.cs
- OrCondition.cs
- GenericPrincipal.cs
- IdentityManager.cs
- BitHelper.cs
- ContextMenu.cs
- CodeMethodMap.cs
- CharacterMetrics.cs
- ArrayConverter.cs
- WorkflowMarkupSerializationProvider.cs
- ValidatorCompatibilityHelper.cs
- CategoriesDocument.cs
- HashCodeCombiner.cs
- TraceUtility.cs
- RowCache.cs
- ExpressionBuilder.cs
- ISFTagAndGuidCache.cs
- JapaneseLunisolarCalendar.cs
- CharKeyFrameCollection.cs
- SQLMoneyStorage.cs
- OleDbConnection.cs
- altserialization.cs
- CursorInteropHelper.cs
- InstallerTypeAttribute.cs
- RecommendedAsConfigurableAttribute.cs
- UpDownBaseDesigner.cs
- VectorKeyFrameCollection.cs
- CheckBox.cs
- Quaternion.cs
- SamlEvidence.cs
- SqlAliasesReferenced.cs
- StreamMarshaler.cs
- SymmetricKeyWrap.cs
- BitmapFrame.cs
- xml.cs
- Pair.cs
- TextEncodedRawTextWriter.cs
- Debug.cs
- SQLInt32.cs
- GeneralTransform2DTo3DTo2D.cs