Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / ToolStripLabel.cs / 1 / ToolStripLabel.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Windows.Forms.ButtonInternal;
using System.Security.Permissions;
using System.Security;
using System.Windows.Forms.Design;
///
///
/// A non selectable winbar item
///
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip)]
public class ToolStripLabel : ToolStripItem {
private LinkBehavior linkBehavior = LinkBehavior.SystemDefault;
private bool isLink = false, linkVisited = false;
private Color linkColor = Color.Empty;
private Color activeLinkColor = Color.Empty;
private Color visitedLinkColor = Color.Empty;
private Font hoverLinkFont, linkFont;
private Cursor lastCursor;
///
///
/// A non selectable winbar item
///
public ToolStripLabel() {
}
public ToolStripLabel(string text):base(text,null,null) {
}
public ToolStripLabel(Image image):base(null,image,null) {
}
public ToolStripLabel(string text, Image image):base(text,image,null) {
}
public ToolStripLabel(string text, Image image, bool isLink):this(text,image,isLink, null) {
}
[SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public ToolStripLabel(string text, Image image, bool isLink, EventHandler onClick):this(text,image,isLink,onClick,null) {
}
[SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public ToolStripLabel(string text, Image image, bool isLink, EventHandler onClick, string name) : base(text,image,onClick,name) {
IsLink = isLink;
}
///
public override bool CanSelect {
get { return (IsLink || DesignMode); }
}
[
DefaultValue(false),
SRCategory(SR.CatBehavior),
SRDescription(SR.ToolStripLabelIsLinkDescr)
]
public bool IsLink {
get {
return isLink;
}
set {
if (isLink != value) {
isLink = value;
Invalidate();
}
}
}
[
SRCategory(SR.CatAppearance),
SRDescription(SR.ToolStripLabelActiveLinkColorDescr)
]
public Color ActiveLinkColor {
get {
if (activeLinkColor.IsEmpty) {
return IEActiveLinkColor;
}
else {
return activeLinkColor;
}
}
set {
if (activeLinkColor != value) {
activeLinkColor = value;
Invalidate();
}
}
}
private Color IELinkColor {
get {
return LinkUtilities.IELinkColor;
}
}
private Color IEActiveLinkColor {
get {
return LinkUtilities.IEActiveLinkColor;
}
}
private Color IEVisitedLinkColor {
get {
return LinkUtilities.IEVisitedLinkColor;
}
}
[
DefaultValue(LinkBehavior.SystemDefault),
SRCategory(SR.CatBehavior),
SRDescription(SR.ToolStripLabelLinkBehaviorDescr)
]
public LinkBehavior LinkBehavior {
get {
return linkBehavior;
}
set {
//valid values are 0x0 to 0x3
if (!ClientUtils.IsEnumValid(value, (int)value, (int)LinkBehavior.SystemDefault, (int)LinkBehavior.NeverUnderline))
{
throw new InvalidEnumArgumentException("LinkBehavior", (int)value, typeof(LinkBehavior));
}
if (linkBehavior != value) {
linkBehavior = value;
InvalidateLinkFonts();
Invalidate();
}
}
}
[
SRCategory(SR.CatAppearance),
SRDescription(SR.ToolStripLabelLinkColorDescr)
]
public Color LinkColor {
get {
if (linkColor.IsEmpty) {
return IELinkColor;
}
else {
return linkColor;
}
}
set {
if (linkColor != value) {
linkColor = value;
Invalidate();
}
}
}
[
DefaultValue(false),
SRCategory(SR.CatAppearance),
SRDescription(SR.ToolStripLabelLinkVisitedDescr)
]
public bool LinkVisited {
get {
return linkVisited;
}
set {
if (linkVisited != value) {
linkVisited = value;
Invalidate();
}
}
}
[
SRCategory(SR.CatAppearance),
SRDescription(SR.ToolStripLabelVisitedLinkColorDescr)
]
public Color VisitedLinkColor {
get {
if (visitedLinkColor.IsEmpty) {
return IEVisitedLinkColor;
}
else {
return visitedLinkColor;
}
}
set {
if (visitedLinkColor != value) {
visitedLinkColor = value;
Invalidate();
}
}
}
///
///
/// Invalidates the current set of fonts we use when painting
/// links. The fonts will be recreated when needed.
///
private void InvalidateLinkFonts() {
if (linkFont != null) {
linkFont.Dispose();
}
if (hoverLinkFont != null && hoverLinkFont != linkFont) {
hoverLinkFont.Dispose();
}
linkFont = null;
hoverLinkFont = null;
}
protected override void OnFontChanged(EventArgs e) {
InvalidateLinkFonts();
base.OnFontChanged(e);
}
protected override void OnMouseEnter(EventArgs e) {
if (IsLink) {
ToolStrip parent = this.Parent;
if (parent != null) {
lastCursor = parent.Cursor;
parent.Cursor = Cursors.Hand;
}
}
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e) {
if (IsLink) {
ToolStrip parent = this.Parent;
if (parent != null) {
parent.Cursor = lastCursor;
}
}
base.OnMouseLeave(e);
}
private void ResetActiveLinkColor()
{
ActiveLinkColor = IEActiveLinkColor;
}
private void ResetLinkColor()
{
LinkColor = IELinkColor;
}
private void ResetVisitedLinkColor()
{
VisitedLinkColor = IEVisitedLinkColor;
}
[EditorBrowsable(EditorBrowsableState.Never)]
private bool ShouldSerializeActiveLinkColor() {
return !activeLinkColor.IsEmpty;
}
[EditorBrowsable(EditorBrowsableState.Never)]
private bool ShouldSerializeLinkColor() {
return !linkColor.IsEmpty;
}
[EditorBrowsable(EditorBrowsableState.Never)]
private bool ShouldSerializeVisitedLinkColor() {
return !visitedLinkColor.IsEmpty;
}
///
/// Creates an instance of the object that defines how image and text
/// gets laid out in the ToolStripItem
///
internal override ToolStripItemInternalLayout CreateInternalLayout() {
return new ToolStripLabelLayout(this);
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
protected override AccessibleObject CreateAccessibilityInstance() {
return new ToolStripLabelAccessibleObject(this);
}
///
///
/// 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;
renderer.DrawLabelBackground(new ToolStripItemRenderEventArgs(e.Graphics, this));
if ((DisplayStyle & ToolStripItemDisplayStyle.Image) == ToolStripItemDisplayStyle.Image) {
renderer.DrawItemImage(new ToolStripItemImageRenderEventArgs(e.Graphics, this, InternalLayout.ImageRectangle));
}
PaintText(e.Graphics);
}
}
internal void PaintText(Graphics g) {
ToolStripRenderer renderer = this.Renderer;
if ((DisplayStyle & ToolStripItemDisplayStyle.Text) == ToolStripItemDisplayStyle.Text) {
Font font = this.Font;
Color textColor = this.ForeColor;
if (IsLink) {
LinkUtilities.EnsureLinkFonts(font, this.LinkBehavior, ref this.linkFont, ref this.hoverLinkFont);
if (this.Pressed) {
font = hoverLinkFont;
textColor = this.ActiveLinkColor;
}
else if (this.Selected) {
font = hoverLinkFont;
textColor = (this.LinkVisited) ? this.VisitedLinkColor : this.LinkColor;
}
else {
font = linkFont;
textColor = (this.LinkVisited) ? this.VisitedLinkColor : this.LinkColor;
}
}
Rectangle textRect = InternalLayout.TextRectangle;
renderer.DrawItemText(new ToolStripItemTextRenderEventArgs(g, this, this.Text, textRect, textColor, font, InternalLayout.TextFormat));
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] // 'charCode' matches control.cs
[UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.AllWindows)]
protected internal override bool ProcessMnemonic(char charCode) {
// checking IsMnemonic is not necessary - toolstrip does this for us.
if (ParentInternal != null) {
if (!CanSelect) {
ParentInternal.SetFocusUnsafe();
ParentInternal.SelectNextToolStripItem(this, /*forward=*/true);
}
else {
FireEvent(ToolStripItemEventType.Click);
}
return true;
}
return false;
}
[System.Runtime.InteropServices.ComVisible(true)]
[SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses")]
internal class ToolStripLabelAccessibleObject : ToolStripItemAccessibleObject {
private ToolStripLabel ownerItem = null;
public ToolStripLabelAccessibleObject(ToolStripLabel ownerItem) : base(ownerItem) {
this.ownerItem = ownerItem;
}
public override string DefaultAction {
get {
if (ownerItem.IsLink) {
return SR.GetString(SR.AccessibleActionClick);
}
else {
return string.Empty;
}
}
}
public override void DoDefaultAction() {
if (ownerItem.IsLink) {
base.DoDefaultAction();
}
}
public override AccessibleRole Role {
get {
AccessibleRole role = Owner.AccessibleRole;
if (role != AccessibleRole.Default) {
return role;
}
return (ownerItem.IsLink) ? AccessibleRole.Link : AccessibleRole.StaticText;
}
}
public override AccessibleStates State {
get {
return base.State | AccessibleStates.ReadOnly;
}
}
}
///
/// This class performs internal layout for the "split button button" portion of a split button.
/// Its main job is to make sure the inner button has the same parent as the split button, so
/// that layout can be performed using the correct graphics context.
///
private class ToolStripLabelLayout : ToolStripItemInternalLayout {
ToolStripLabel owner;
public ToolStripLabelLayout(ToolStripLabel owner) : base(owner) {
this.owner = owner;
}
protected override ToolStripItemLayoutOptions CommonLayoutOptions() {
ToolStripItemLayoutOptions layoutOptions = base.CommonLayoutOptions();
layoutOptions.borderSize = 0;
return layoutOptions;
}
}
}
}
// 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
- sqlmetadatafactory.cs
- DefaultProxySection.cs
- ControlPaint.cs
- MenuItem.cs
- BasicHttpBindingElement.cs
- cookiecollection.cs
- ParseNumbers.cs
- ProvidersHelper.cs
- PathFigureCollectionValueSerializer.cs
- AnonymousIdentificationSection.cs
- RemotingSurrogateSelector.cs
- AuthenticationService.cs
- HierarchicalDataBoundControl.cs
- TextDocumentView.cs
- ServiceOperationListItemList.cs
- InternalConfigHost.cs
- SelfIssuedAuthRSAPKCS1SignatureFormatter.cs
- ColumnBinding.cs
- SequentialUshortCollection.cs
- DataControlButton.cs
- XmlChildNodes.cs
- HiddenFieldPageStatePersister.cs
- XPathNodePointer.cs
- ObjectTag.cs
- JournalEntryListConverter.cs
- JavaScriptString.cs
- EventWaitHandle.cs
- OutputScopeManager.cs
- FocusChangedEventArgs.cs
- InputBindingCollection.cs
- DataProtectionSecurityStateEncoder.cs
- KeyGesture.cs
- DrawingGroupDrawingContext.cs
- SecurityUtils.cs
- ObjectListGeneralPage.cs
- ClipboardProcessor.cs
- DesignerForm.cs
- ServiceNotStartedException.cs
- TextContainerChangeEventArgs.cs
- TemplatePropertyEntry.cs
- ComponentRenameEvent.cs
- BasicExpressionVisitor.cs
- CqlLexerHelpers.cs
- IIS7UserPrincipal.cs
- XmlRawWriter.cs
- UrlMappingCollection.cs
- ExtentKey.cs
- TranslateTransform3D.cs
- TreeView.cs
- CodeExpressionCollection.cs
- PageFunction.cs
- ELinqQueryState.cs
- SoapAttributeOverrides.cs
- VerificationAttribute.cs
- Clock.cs
- SimpleBitVector32.cs
- BookmarkEventArgs.cs
- Buffer.cs
- DataAdapter.cs
- Inline.cs
- QilIterator.cs
- DelegatingConfigHost.cs
- DbLambda.cs
- SafeEventLogWriteHandle.cs
- InputLanguageCollection.cs
- UidPropertyAttribute.cs
- SafeNativeMethodsMilCoreApi.cs
- Renderer.cs
- CurrentChangingEventManager.cs
- COM2Properties.cs
- FixedSOMTextRun.cs
- KerberosSecurityTokenAuthenticator.cs
- _ConnectOverlappedAsyncResult.cs
- NetCodeGroup.cs
- VirtualizingStackPanel.cs
- StylusPlugin.cs
- HMACRIPEMD160.cs
- objectresult_tresulttype.cs
- HtmlFormWrapper.cs
- SignatureDescription.cs
- glyphs.cs
- XmlSecureResolver.cs
- DocumentViewerHelper.cs
- CodeTypeConstructor.cs
- ToolStripDropDownClosingEventArgs.cs
- AuthorizationRuleCollection.cs
- ReadOnlyTernaryTree.cs
- KerberosSecurityTokenProvider.cs
- propertytag.cs
- UdpSocketReceiveManager.cs
- XmlSubtreeReader.cs
- XmlNodeReader.cs
- CustomActivityDesigner.cs
- Application.cs
- Match.cs
- FrameworkName.cs
- WorkflowMarkupSerializer.cs
- TableSectionStyle.cs
- Rijndael.cs
- WebEvents.cs