Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / DataGridViewUtilities.cs / 1305376 / 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
- ellipse.cs
- RequestCachePolicy.cs
- IconBitmapDecoder.cs
- CodeDirectiveCollection.cs
- DBNull.cs
- SetState.cs
- DmlSqlGenerator.cs
- Pair.cs
- InternalSafeNativeMethods.cs
- QueryStringParameter.cs
- _ShellExpression.cs
- PropertyInformationCollection.cs
- XamlReader.cs
- WebEvents.cs
- ToolboxComponentsCreatedEventArgs.cs
- DetailsViewInsertEventArgs.cs
- DbCommandTree.cs
- ColumnCollection.cs
- Table.cs
- TextElementAutomationPeer.cs
- QueryReaderSettings.cs
- WebBrowserHelper.cs
- DesignerWidgets.cs
- ForceCopyBuildProvider.cs
- MaterialGroup.cs
- FormsAuthenticationConfiguration.cs
- ZipIOExtraField.cs
- TransformPattern.cs
- AccessDataSourceWizardForm.cs
- _SSPIWrapper.cs
- VisualTransition.cs
- ProtocolViolationException.cs
- ToolStripItemEventArgs.cs
- SQLBinary.cs
- GridEntryCollection.cs
- DataProtectionSecurityStateEncoder.cs
- BitVector32.cs
- XmlSchemaImporter.cs
- ColorConvertedBitmapExtension.cs
- InlineCollection.cs
- InvokeProviderWrapper.cs
- SQLSingle.cs
- PopupControlService.cs
- DataObjectAttribute.cs
- JoinElimination.cs
- Memoizer.cs
- RawStylusInput.cs
- QuaternionAnimation.cs
- RadioButtonBaseAdapter.cs
- RbTree.cs
- FloaterParagraph.cs
- URL.cs
- IsolationInterop.cs
- NativeMethods.cs
- AuthenticationSection.cs
- SecurityElement.cs
- SchemaEntity.cs
- CachedCompositeFamily.cs
- Stack.cs
- ForeignKeyConstraint.cs
- DataException.cs
- SystemGatewayIPAddressInformation.cs
- TileBrush.cs
- ListBoxChrome.cs
- nulltextnavigator.cs
- AmbientLight.cs
- PasswordPropertyTextAttribute.cs
- TimeSpanFormat.cs
- Resources.Designer.cs
- Button.cs
- Property.cs
- SmiTypedGetterSetter.cs
- Accessible.cs
- VectorAnimationBase.cs
- MetadataFile.cs
- SerializerDescriptor.cs
- __ComObject.cs
- RawAppCommandInputReport.cs
- UnsafeNativeMethods.cs
- FlowNode.cs
- SmiConnection.cs
- Configuration.cs
- AnonymousIdentificationModule.cs
- SplayTreeNode.cs
- TextServicesCompartment.cs
- CompiledXpathExpr.cs
- ConfigXmlAttribute.cs
- MD5Cng.cs
- GeneralTransform2DTo3DTo2D.cs
- SizeAnimation.cs
- storepermission.cs
- TextViewElement.cs
- X509Certificate.cs
- BindingList.cs
- HelloMessageCD1.cs
- VirtualPathProvider.cs
- MetabaseSettings.cs
- Group.cs
- HtmlHead.cs
- ClusterRegistryConfigurationProvider.cs