Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / WinForms / Managed / System / WinForms / DataGridViewUtilities.cs / 1 / DataGridViewUtilities.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms.Internal; using System.Drawing.Imaging; using System.Windows.Forms.VisualStyles; ////// /// internal class DataGridViewUtilities { private const byte DATAGRIDVIEWROWHEADERCELL_iconMarginWidth = 3; // 3 pixels of margin on the left and right of icons private const byte DATAGRIDVIEWROWHEADERCELL_iconMarginHeight = 2; // 2 pixels of margin on the top and bottom of icons private const byte DATAGRIDVIEWROWHEADERCELL_contentMarginWidth = 3; // 3 pixels of margin on the left and right of content private const byte DATAGRIDVIEWROWHEADERCELL_contentMarginHeight = 3; // 3 pixels of margin on the top and bottom of content private const byte DATAGRIDVIEWROWHEADERCELL_iconsWidth = 12; // all icons are 12 pixels wide - make sure that is stays that way private const byte DATAGRIDVIEWROWHEADERCELL_iconsHeight = 11; // all icons are 11 pixels tall - make sure that is stays that way private const byte DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft = 1; private const byte DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight = 2; private const byte DATAGRIDVIEWROWHEADERCELL_verticalTextMargin = 1; ////// internal static System.Drawing.ContentAlignment ComputeDrawingContentAlignmentForCellStyleAlignment(DataGridViewContentAlignment alignment) { // Why isn't the DataGridView using System.Drawing.ContentAlignment? switch (alignment) { case DataGridViewContentAlignment.TopLeft: return System.Drawing.ContentAlignment.TopLeft; case DataGridViewContentAlignment.TopCenter: return System.Drawing.ContentAlignment.TopCenter; case DataGridViewContentAlignment.TopRight: return System.Drawing.ContentAlignment.TopRight; case DataGridViewContentAlignment.MiddleLeft: return System.Drawing.ContentAlignment.MiddleLeft; case DataGridViewContentAlignment.MiddleCenter: return System.Drawing.ContentAlignment.MiddleCenter; case DataGridViewContentAlignment.MiddleRight: return System.Drawing.ContentAlignment.MiddleRight; case DataGridViewContentAlignment.BottomLeft: return System.Drawing.ContentAlignment.BottomLeft; case DataGridViewContentAlignment.BottomCenter: return System.Drawing.ContentAlignment.BottomCenter; case DataGridViewContentAlignment.BottomRight: return System.Drawing.ContentAlignment.BottomRight; default: return System.Drawing.ContentAlignment.MiddleCenter; } } /// internal static TextFormatFlags ComputeTextFormatFlagsForCellStyleAlignment(bool rightToLeft, DataGridViewContentAlignment alignment, DataGridViewTriState wrapMode) { TextFormatFlags tff; switch (alignment) { case DataGridViewContentAlignment.TopLeft: tff = TextFormatFlags.Top; if (rightToLeft) { tff |= TextFormatFlags.Right; } else { tff |= TextFormatFlags.Left; } break; case DataGridViewContentAlignment.TopCenter: tff = TextFormatFlags.Top | TextFormatFlags.HorizontalCenter; break; case DataGridViewContentAlignment.TopRight: tff = TextFormatFlags.Top; if (rightToLeft) { tff |= TextFormatFlags.Left; } else { tff |= TextFormatFlags.Right; } break; case DataGridViewContentAlignment.MiddleLeft: tff = TextFormatFlags.VerticalCenter; if (rightToLeft) { tff |= TextFormatFlags.Right; } else { tff |= TextFormatFlags.Left; } break; case DataGridViewContentAlignment.MiddleCenter: tff = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; break; case DataGridViewContentAlignment.MiddleRight: tff = TextFormatFlags.VerticalCenter; if (rightToLeft) { tff |= TextFormatFlags.Left; } else { tff |= TextFormatFlags.Right; } break; case DataGridViewContentAlignment.BottomLeft: tff = TextFormatFlags.Bottom; if (rightToLeft) { tff |= TextFormatFlags.Right; } else { tff |= TextFormatFlags.Left; } break; case DataGridViewContentAlignment.BottomCenter: tff = TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter; break; case DataGridViewContentAlignment.BottomRight: tff = TextFormatFlags.Bottom; if (rightToLeft) { tff |= TextFormatFlags.Left; } else { tff |= TextFormatFlags.Right; } break; default: tff = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; break; } if (wrapMode == DataGridViewTriState.False) { tff |= TextFormatFlags.SingleLine; } else { //tff |= TextFormatFlags.NoFullWidthCharacterBreak; VSWhidbey 518422 tff |= TextFormatFlags.WordBreak; } tff |= TextFormatFlags.NoPrefix; tff |= TextFormatFlags.PreserveGraphicsClipping; if (rightToLeft) { tff |= TextFormatFlags.RightToLeft; } return tff; } /// internal static Size GetPreferredRowHeaderSize(Graphics graphics, string val, DataGridViewCellStyle cellStyle, int borderAndPaddingWidths, int borderAndPaddingHeights, bool showRowErrors, bool showGlyph, Size constraintSize, TextFormatFlags flags) { Size preferredSize; DataGridViewFreeDimension freeDimension = DataGridViewCell.GetFreeDimensionFromConstraint(constraintSize); switch (freeDimension) { case DataGridViewFreeDimension.Width: { int preferredWidth = 0, allowedHeight = constraintSize.Height - borderAndPaddingHeights; if (!String.IsNullOrEmpty(val)) { int maxHeight = allowedHeight - 2 * DATAGRIDVIEWROWHEADERCELL_verticalTextMargin; if (maxHeight > 0) { if (cellStyle.WrapMode == DataGridViewTriState.True) { preferredWidth = DataGridViewCell.MeasureTextWidth(graphics, val, cellStyle.Font, maxHeight, flags); } else { preferredWidth = DataGridViewCell.MeasureTextSize(graphics, val, cellStyle.Font, flags).Width; } preferredWidth += 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight; } } if (allowedHeight >= DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight) { if (showGlyph) { preferredWidth += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } if (showRowErrors) { preferredWidth += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } } preferredWidth = Math.Max(preferredWidth, 1); preferredWidth += borderAndPaddingWidths; return new Size(preferredWidth, 0); } case DataGridViewFreeDimension.Height: { int minHeightIcon = 1, minHeightContent = 1; int allowedWidth = constraintSize.Width - borderAndPaddingWidths; if (!String.IsNullOrEmpty(val)) { if (showGlyph && allowedWidth >= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth) { // There is enough room for the status icon minHeightIcon = DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight; // Status icon takes priority allowedWidth -= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth; } if (showRowErrors && allowedWidth >= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth) { // There is enough room for the error icon minHeightIcon = DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight; // There is enough room for both the status and error icons allowedWidth -= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth; } if (allowedWidth > 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight) { // There is enough room for text allowedWidth -= 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight; if (cellStyle.WrapMode == DataGridViewTriState.True) { minHeightContent = DataGridViewCell.MeasureTextHeight(graphics, val, cellStyle.Font, allowedWidth, flags); } else { minHeightContent = DataGridViewCell.MeasureTextSize(graphics, val, cellStyle.Font, flags).Height; } minHeightContent += 2 * DATAGRIDVIEWROWHEADERCELL_verticalTextMargin; } } else { if ((showGlyph || showRowErrors) && allowedWidth >= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth) { minHeightIcon = DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight; } } return new Size(0, Math.Max(minHeightIcon, minHeightContent) + borderAndPaddingHeights); } default: { if (!String.IsNullOrEmpty(val)) { if (cellStyle.WrapMode == DataGridViewTriState.True) { preferredSize = DataGridViewCell.MeasureTextPreferredSize(graphics, val, cellStyle.Font, 5.0F, flags); } else { preferredSize = DataGridViewCell.MeasureTextSize(graphics, val, cellStyle.Font, flags); } preferredSize.Width += 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight; preferredSize.Height += 2*DATAGRIDVIEWROWHEADERCELL_verticalTextMargin; } else { preferredSize = new Size(0, 1); } if (showGlyph) { preferredSize.Width += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } if (showRowErrors) { preferredSize.Width += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } if (showGlyph || showRowErrors) { preferredSize.Height = Math.Max(preferredSize.Height, DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight); } preferredSize.Width += borderAndPaddingWidths; preferredSize.Height += borderAndPaddingHeights; return preferredSize; } } } internal static Rectangle GetTextBounds(Rectangle cellBounds, string text, TextFormatFlags flags, DataGridViewCellStyle cellStyle) { return GetTextBounds(cellBounds, text, flags, cellStyle, cellStyle.Font); } internal static Rectangle GetTextBounds(Rectangle cellBounds, string text, TextFormatFlags flags, DataGridViewCellStyle cellStyle, Font font) { if ((flags & TextFormatFlags.SingleLine) != 0) { Size sizeRequired = TextRenderer.MeasureText(text, font, new Size(System.Int32.MaxValue, System.Int32.MaxValue), flags); if (sizeRequired.Width > cellBounds.Width) { flags |= TextFormatFlags.EndEllipsis; } } Size sizeCell = new Size(cellBounds.Width, cellBounds.Height); Size sizeConstraint = TextRenderer.MeasureText(text, font, sizeCell, flags); if (sizeConstraint.Width > sizeCell.Width) { sizeConstraint.Width = sizeCell.Width; } if (sizeConstraint.Height > sizeCell.Height) { sizeConstraint.Height = sizeCell.Height; } if (sizeConstraint == sizeCell) { return cellBounds; } return new Rectangle(GetTextLocation(cellBounds, sizeConstraint, flags, cellStyle), sizeConstraint); } internal static Point GetTextLocation(Rectangle cellBounds, Size sizeText, TextFormatFlags flags, DataGridViewCellStyle cellStyle) { Point ptTextLocation = new Point(0, 0); // now use the alignment on the cellStyle to determine the final text location DataGridViewContentAlignment alignment = cellStyle.Alignment; if ((flags & TextFormatFlags.RightToLeft) != 0) { switch (alignment) { case DataGridViewContentAlignment.TopLeft: alignment = DataGridViewContentAlignment.TopRight; break; case DataGridViewContentAlignment.TopRight: alignment = DataGridViewContentAlignment.TopLeft; break; case DataGridViewContentAlignment.MiddleLeft: alignment = DataGridViewContentAlignment.MiddleRight; break; case DataGridViewContentAlignment.MiddleRight: alignment = DataGridViewContentAlignment.MiddleLeft; break; case DataGridViewContentAlignment.BottomLeft: alignment = DataGridViewContentAlignment.BottomRight; break; case DataGridViewContentAlignment.BottomRight: alignment = DataGridViewContentAlignment.BottomLeft; break; } } switch (alignment) { case DataGridViewContentAlignment.TopLeft: ptTextLocation.X = cellBounds.X; ptTextLocation.Y = cellBounds.Y; break; case DataGridViewContentAlignment.TopCenter: ptTextLocation.X = cellBounds.X + (cellBounds.Width - sizeText.Width) / 2; ptTextLocation.Y = cellBounds.Y; break; case DataGridViewContentAlignment.TopRight: ptTextLocation.X = cellBounds.Right - sizeText.Width; ptTextLocation.Y = cellBounds.Y; break; case DataGridViewContentAlignment.MiddleLeft: ptTextLocation.X = cellBounds.X; ptTextLocation.Y = cellBounds.Y + (cellBounds.Height - sizeText.Height) / 2; break; case DataGridViewContentAlignment.MiddleCenter: ptTextLocation.X = cellBounds.X + (cellBounds.Width - sizeText.Width) / 2; ptTextLocation.Y = cellBounds.Y + (cellBounds.Height - sizeText.Height) / 2; break; case DataGridViewContentAlignment.MiddleRight: ptTextLocation.X = cellBounds.Right - sizeText.Width; ptTextLocation.Y = cellBounds.Y + (cellBounds.Height - sizeText.Height) / 2; break; case DataGridViewContentAlignment.BottomLeft: ptTextLocation.X = cellBounds.X; ptTextLocation.Y = cellBounds.Bottom - sizeText.Height; break; case DataGridViewContentAlignment.BottomCenter: ptTextLocation.X = cellBounds.X + (cellBounds.Width - sizeText.Width) / 2; ptTextLocation.Y = cellBounds.Bottom - sizeText.Height; break; case DataGridViewContentAlignment.BottomRight: ptTextLocation.X = cellBounds.Right - sizeText.Width; ptTextLocation.Y = cellBounds.Bottom - sizeText.Height; break; default: Debug.Assert(cellStyle.Alignment == DataGridViewContentAlignment.NotSet, "this is the only alignment left"); break; } return ptTextLocation; } internal static bool ValidTextFormatFlags(TextFormatFlags flags) { return (flags & ~(TextFormatFlags.Bottom | TextFormatFlags.Default | TextFormatFlags.EndEllipsis | TextFormatFlags.ExpandTabs | TextFormatFlags.ExternalLeading | TextFormatFlags.HidePrefix | TextFormatFlags.HorizontalCenter | TextFormatFlags.Internal | TextFormatFlags.Left | TextFormatFlags.ModifyString | TextFormatFlags.NoClipping | TextFormatFlags.NoFullWidthCharacterBreak | TextFormatFlags.NoPrefix | TextFormatFlags.PathEllipsis | TextFormatFlags.PrefixOnly | TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.PreserveGraphicsTranslateTransform | TextFormatFlags.Right | TextFormatFlags.RightToLeft | TextFormatFlags.SingleLine | TextFormatFlags.TextBoxControl | TextFormatFlags.Top | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak | TextFormatFlags.WordEllipsis)) == 0; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms.Internal; using System.Drawing.Imaging; using System.Windows.Forms.VisualStyles; ////// /// internal class DataGridViewUtilities { private const byte DATAGRIDVIEWROWHEADERCELL_iconMarginWidth = 3; // 3 pixels of margin on the left and right of icons private const byte DATAGRIDVIEWROWHEADERCELL_iconMarginHeight = 2; // 2 pixels of margin on the top and bottom of icons private const byte DATAGRIDVIEWROWHEADERCELL_contentMarginWidth = 3; // 3 pixels of margin on the left and right of content private const byte DATAGRIDVIEWROWHEADERCELL_contentMarginHeight = 3; // 3 pixels of margin on the top and bottom of content private const byte DATAGRIDVIEWROWHEADERCELL_iconsWidth = 12; // all icons are 12 pixels wide - make sure that is stays that way private const byte DATAGRIDVIEWROWHEADERCELL_iconsHeight = 11; // all icons are 11 pixels tall - make sure that is stays that way private const byte DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft = 1; private const byte DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight = 2; private const byte DATAGRIDVIEWROWHEADERCELL_verticalTextMargin = 1; ////// internal static System.Drawing.ContentAlignment ComputeDrawingContentAlignmentForCellStyleAlignment(DataGridViewContentAlignment alignment) { // Why isn't the DataGridView using System.Drawing.ContentAlignment? switch (alignment) { case DataGridViewContentAlignment.TopLeft: return System.Drawing.ContentAlignment.TopLeft; case DataGridViewContentAlignment.TopCenter: return System.Drawing.ContentAlignment.TopCenter; case DataGridViewContentAlignment.TopRight: return System.Drawing.ContentAlignment.TopRight; case DataGridViewContentAlignment.MiddleLeft: return System.Drawing.ContentAlignment.MiddleLeft; case DataGridViewContentAlignment.MiddleCenter: return System.Drawing.ContentAlignment.MiddleCenter; case DataGridViewContentAlignment.MiddleRight: return System.Drawing.ContentAlignment.MiddleRight; case DataGridViewContentAlignment.BottomLeft: return System.Drawing.ContentAlignment.BottomLeft; case DataGridViewContentAlignment.BottomCenter: return System.Drawing.ContentAlignment.BottomCenter; case DataGridViewContentAlignment.BottomRight: return System.Drawing.ContentAlignment.BottomRight; default: return System.Drawing.ContentAlignment.MiddleCenter; } } /// internal static TextFormatFlags ComputeTextFormatFlagsForCellStyleAlignment(bool rightToLeft, DataGridViewContentAlignment alignment, DataGridViewTriState wrapMode) { TextFormatFlags tff; switch (alignment) { case DataGridViewContentAlignment.TopLeft: tff = TextFormatFlags.Top; if (rightToLeft) { tff |= TextFormatFlags.Right; } else { tff |= TextFormatFlags.Left; } break; case DataGridViewContentAlignment.TopCenter: tff = TextFormatFlags.Top | TextFormatFlags.HorizontalCenter; break; case DataGridViewContentAlignment.TopRight: tff = TextFormatFlags.Top; if (rightToLeft) { tff |= TextFormatFlags.Left; } else { tff |= TextFormatFlags.Right; } break; case DataGridViewContentAlignment.MiddleLeft: tff = TextFormatFlags.VerticalCenter; if (rightToLeft) { tff |= TextFormatFlags.Right; } else { tff |= TextFormatFlags.Left; } break; case DataGridViewContentAlignment.MiddleCenter: tff = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; break; case DataGridViewContentAlignment.MiddleRight: tff = TextFormatFlags.VerticalCenter; if (rightToLeft) { tff |= TextFormatFlags.Left; } else { tff |= TextFormatFlags.Right; } break; case DataGridViewContentAlignment.BottomLeft: tff = TextFormatFlags.Bottom; if (rightToLeft) { tff |= TextFormatFlags.Right; } else { tff |= TextFormatFlags.Left; } break; case DataGridViewContentAlignment.BottomCenter: tff = TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter; break; case DataGridViewContentAlignment.BottomRight: tff = TextFormatFlags.Bottom; if (rightToLeft) { tff |= TextFormatFlags.Left; } else { tff |= TextFormatFlags.Right; } break; default: tff = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; break; } if (wrapMode == DataGridViewTriState.False) { tff |= TextFormatFlags.SingleLine; } else { //tff |= TextFormatFlags.NoFullWidthCharacterBreak; VSWhidbey 518422 tff |= TextFormatFlags.WordBreak; } tff |= TextFormatFlags.NoPrefix; tff |= TextFormatFlags.PreserveGraphicsClipping; if (rightToLeft) { tff |= TextFormatFlags.RightToLeft; } return tff; } /// internal static Size GetPreferredRowHeaderSize(Graphics graphics, string val, DataGridViewCellStyle cellStyle, int borderAndPaddingWidths, int borderAndPaddingHeights, bool showRowErrors, bool showGlyph, Size constraintSize, TextFormatFlags flags) { Size preferredSize; DataGridViewFreeDimension freeDimension = DataGridViewCell.GetFreeDimensionFromConstraint(constraintSize); switch (freeDimension) { case DataGridViewFreeDimension.Width: { int preferredWidth = 0, allowedHeight = constraintSize.Height - borderAndPaddingHeights; if (!String.IsNullOrEmpty(val)) { int maxHeight = allowedHeight - 2 * DATAGRIDVIEWROWHEADERCELL_verticalTextMargin; if (maxHeight > 0) { if (cellStyle.WrapMode == DataGridViewTriState.True) { preferredWidth = DataGridViewCell.MeasureTextWidth(graphics, val, cellStyle.Font, maxHeight, flags); } else { preferredWidth = DataGridViewCell.MeasureTextSize(graphics, val, cellStyle.Font, flags).Width; } preferredWidth += 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight; } } if (allowedHeight >= DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight) { if (showGlyph) { preferredWidth += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } if (showRowErrors) { preferredWidth += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } } preferredWidth = Math.Max(preferredWidth, 1); preferredWidth += borderAndPaddingWidths; return new Size(preferredWidth, 0); } case DataGridViewFreeDimension.Height: { int minHeightIcon = 1, minHeightContent = 1; int allowedWidth = constraintSize.Width - borderAndPaddingWidths; if (!String.IsNullOrEmpty(val)) { if (showGlyph && allowedWidth >= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth) { // There is enough room for the status icon minHeightIcon = DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight; // Status icon takes priority allowedWidth -= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth; } if (showRowErrors && allowedWidth >= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth) { // There is enough room for the error icon minHeightIcon = DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight; // There is enough room for both the status and error icons allowedWidth -= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth; } if (allowedWidth > 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight) { // There is enough room for text allowedWidth -= 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight; if (cellStyle.WrapMode == DataGridViewTriState.True) { minHeightContent = DataGridViewCell.MeasureTextHeight(graphics, val, cellStyle.Font, allowedWidth, flags); } else { minHeightContent = DataGridViewCell.MeasureTextSize(graphics, val, cellStyle.Font, flags).Height; } minHeightContent += 2 * DATAGRIDVIEWROWHEADERCELL_verticalTextMargin; } } else { if ((showGlyph || showRowErrors) && allowedWidth >= 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth + DATAGRIDVIEWROWHEADERCELL_iconsWidth) { minHeightIcon = DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight; } } return new Size(0, Math.Max(minHeightIcon, minHeightContent) + borderAndPaddingHeights); } default: { if (!String.IsNullOrEmpty(val)) { if (cellStyle.WrapMode == DataGridViewTriState.True) { preferredSize = DataGridViewCell.MeasureTextPreferredSize(graphics, val, cellStyle.Font, 5.0F, flags); } else { preferredSize = DataGridViewCell.MeasureTextSize(graphics, val, cellStyle.Font, flags); } preferredSize.Width += 2 * DATAGRIDVIEWROWHEADERCELL_contentMarginWidth + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginLeft + DATAGRIDVIEWROWHEADERCELL_horizontalTextMarginRight; preferredSize.Height += 2*DATAGRIDVIEWROWHEADERCELL_verticalTextMargin; } else { preferredSize = new Size(0, 1); } if (showGlyph) { preferredSize.Width += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } if (showRowErrors) { preferredSize.Width += DATAGRIDVIEWROWHEADERCELL_iconsWidth + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginWidth; } if (showGlyph || showRowErrors) { preferredSize.Height = Math.Max(preferredSize.Height, DATAGRIDVIEWROWHEADERCELL_iconsHeight + 2 * DATAGRIDVIEWROWHEADERCELL_iconMarginHeight); } preferredSize.Width += borderAndPaddingWidths; preferredSize.Height += borderAndPaddingHeights; return preferredSize; } } } internal static Rectangle GetTextBounds(Rectangle cellBounds, string text, TextFormatFlags flags, DataGridViewCellStyle cellStyle) { return GetTextBounds(cellBounds, text, flags, cellStyle, cellStyle.Font); } internal static Rectangle GetTextBounds(Rectangle cellBounds, string text, TextFormatFlags flags, DataGridViewCellStyle cellStyle, Font font) { if ((flags & TextFormatFlags.SingleLine) != 0) { Size sizeRequired = TextRenderer.MeasureText(text, font, new Size(System.Int32.MaxValue, System.Int32.MaxValue), flags); if (sizeRequired.Width > cellBounds.Width) { flags |= TextFormatFlags.EndEllipsis; } } Size sizeCell = new Size(cellBounds.Width, cellBounds.Height); Size sizeConstraint = TextRenderer.MeasureText(text, font, sizeCell, flags); if (sizeConstraint.Width > sizeCell.Width) { sizeConstraint.Width = sizeCell.Width; } if (sizeConstraint.Height > sizeCell.Height) { sizeConstraint.Height = sizeCell.Height; } if (sizeConstraint == sizeCell) { return cellBounds; } return new Rectangle(GetTextLocation(cellBounds, sizeConstraint, flags, cellStyle), sizeConstraint); } internal static Point GetTextLocation(Rectangle cellBounds, Size sizeText, TextFormatFlags flags, DataGridViewCellStyle cellStyle) { Point ptTextLocation = new Point(0, 0); // now use the alignment on the cellStyle to determine the final text location DataGridViewContentAlignment alignment = cellStyle.Alignment; if ((flags & TextFormatFlags.RightToLeft) != 0) { switch (alignment) { case DataGridViewContentAlignment.TopLeft: alignment = DataGridViewContentAlignment.TopRight; break; case DataGridViewContentAlignment.TopRight: alignment = DataGridViewContentAlignment.TopLeft; break; case DataGridViewContentAlignment.MiddleLeft: alignment = DataGridViewContentAlignment.MiddleRight; break; case DataGridViewContentAlignment.MiddleRight: alignment = DataGridViewContentAlignment.MiddleLeft; break; case DataGridViewContentAlignment.BottomLeft: alignment = DataGridViewContentAlignment.BottomRight; break; case DataGridViewContentAlignment.BottomRight: alignment = DataGridViewContentAlignment.BottomLeft; break; } } switch (alignment) { case DataGridViewContentAlignment.TopLeft: ptTextLocation.X = cellBounds.X; ptTextLocation.Y = cellBounds.Y; break; case DataGridViewContentAlignment.TopCenter: ptTextLocation.X = cellBounds.X + (cellBounds.Width - sizeText.Width) / 2; ptTextLocation.Y = cellBounds.Y; break; case DataGridViewContentAlignment.TopRight: ptTextLocation.X = cellBounds.Right - sizeText.Width; ptTextLocation.Y = cellBounds.Y; break; case DataGridViewContentAlignment.MiddleLeft: ptTextLocation.X = cellBounds.X; ptTextLocation.Y = cellBounds.Y + (cellBounds.Height - sizeText.Height) / 2; break; case DataGridViewContentAlignment.MiddleCenter: ptTextLocation.X = cellBounds.X + (cellBounds.Width - sizeText.Width) / 2; ptTextLocation.Y = cellBounds.Y + (cellBounds.Height - sizeText.Height) / 2; break; case DataGridViewContentAlignment.MiddleRight: ptTextLocation.X = cellBounds.Right - sizeText.Width; ptTextLocation.Y = cellBounds.Y + (cellBounds.Height - sizeText.Height) / 2; break; case DataGridViewContentAlignment.BottomLeft: ptTextLocation.X = cellBounds.X; ptTextLocation.Y = cellBounds.Bottom - sizeText.Height; break; case DataGridViewContentAlignment.BottomCenter: ptTextLocation.X = cellBounds.X + (cellBounds.Width - sizeText.Width) / 2; ptTextLocation.Y = cellBounds.Bottom - sizeText.Height; break; case DataGridViewContentAlignment.BottomRight: ptTextLocation.X = cellBounds.Right - sizeText.Width; ptTextLocation.Y = cellBounds.Bottom - sizeText.Height; break; default: Debug.Assert(cellStyle.Alignment == DataGridViewContentAlignment.NotSet, "this is the only alignment left"); break; } return ptTextLocation; } internal static bool ValidTextFormatFlags(TextFormatFlags flags) { return (flags & ~(TextFormatFlags.Bottom | TextFormatFlags.Default | TextFormatFlags.EndEllipsis | TextFormatFlags.ExpandTabs | TextFormatFlags.ExternalLeading | TextFormatFlags.HidePrefix | TextFormatFlags.HorizontalCenter | TextFormatFlags.Internal | TextFormatFlags.Left | TextFormatFlags.ModifyString | TextFormatFlags.NoClipping | TextFormatFlags.NoFullWidthCharacterBreak | TextFormatFlags.NoPrefix | TextFormatFlags.PathEllipsis | TextFormatFlags.PrefixOnly | TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.PreserveGraphicsTranslateTransform | TextFormatFlags.Right | TextFormatFlags.RightToLeft | TextFormatFlags.SingleLine | TextFormatFlags.TextBoxControl | TextFormatFlags.Top | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak | TextFormatFlags.WordEllipsis)) == 0; } } } // 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
- RijndaelManaged.cs
- baseaxisquery.cs
- SecurityManager.cs
- SqlDataSourceCommandEventArgs.cs
- DBSqlParserColumn.cs
- Int32RectValueSerializer.cs
- BindingMAnagerBase.cs
- WebServiceHost.cs
- ObjectPersistData.cs
- RemotingException.cs
- CompositeActivityTypeDescriptorProvider.cs
- AssociationType.cs
- DataGridViewButtonCell.cs
- ByeMessage11.cs
- HttpAsyncResult.cs
- FunctionParameter.cs
- ModelPropertyCollectionImpl.cs
- CurrentChangingEventManager.cs
- CodeChecksumPragma.cs
- DateTimeStorage.cs
- TabControlAutomationPeer.cs
- FixUpCollection.cs
- CommonEndpointBehaviorElement.cs
- RC2.cs
- IndexedEnumerable.cs
- ToolboxDataAttribute.cs
- StaticFileHandler.cs
- TdsRecordBufferSetter.cs
- PagesChangedEventArgs.cs
- SyndicationLink.cs
- CompilerResults.cs
- PropertyItem.cs
- SafeEventHandle.cs
- IsolatedStorageFile.cs
- PropertyInformation.cs
- UserControl.cs
- ListViewSortEventArgs.cs
- NotificationContext.cs
- WebRequestModuleElementCollection.cs
- BreakRecordTable.cs
- PolicyManager.cs
- KeyboardEventArgs.cs
- NullableDecimalSumAggregationOperator.cs
- TableCellAutomationPeer.cs
- LicenseException.cs
- TimeZone.cs
- EdmComplexPropertyAttribute.cs
- FixedDocumentSequencePaginator.cs
- DataGridViewCheckBoxColumn.cs
- BitmapMetadataBlob.cs
- Trace.cs
- FrameworkObject.cs
- SessionStateItemCollection.cs
- SelectionRangeConverter.cs
- ItemsControl.cs
- FunctionImportMapping.cs
- LinkedResource.cs
- ProviderConnectionPointCollection.cs
- AppDomainProtocolHandler.cs
- hresults.cs
- Scene3D.cs
- TailPinnedEventArgs.cs
- FunctionDescription.cs
- StaticSiteMapProvider.cs
- TypographyProperties.cs
- FamilyCollection.cs
- AssemblyResourceLoader.cs
- Pkcs7Recipient.cs
- CollectionType.cs
- XmlLanguageConverter.cs
- RequestTimeoutManager.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- NameTable.cs
- ColorTransformHelper.cs
- EmbeddedMailObject.cs
- IOException.cs
- RetrieveVirtualItemEventArgs.cs
- HttpCookie.cs
- CommandHelpers.cs
- FileDialog_Vista.cs
- Processor.cs
- LicFileLicenseProvider.cs
- NativeMethods.cs
- DocumentsTrace.cs
- DesignerHelpers.cs
- GZipObjectSerializer.cs
- StreamFormatter.cs
- SupportsEventValidationAttribute.cs
- DataBoundControlAdapter.cs
- IImplicitResourceProvider.cs
- ByteStream.cs
- ToolTip.cs
- SchemaReference.cs
- LOSFormatter.cs
- CalendarButton.cs
- CompatibleComparer.cs
- CounterNameConverter.cs
- AddInEnvironment.cs
- DefaultValueAttribute.cs
- MimeWriter.cs