SystemTrayMenu/Utilities/DataGridViewExtensions.cs

51 lines
1.9 KiB
C#
Raw Normal View History

2020-03-14 02:31:31 +13:00
using System.Data;
2020-05-06 12:39:38 +12:00
using System.Drawing;
2020-03-14 02:31:31 +13:00
using System.Linq;
using System.Windows.Forms;
namespace SystemTrayMenu.Utilities
2020-03-14 02:31:31 +13:00
{
internal static class DataGridViewExtensions
2020-03-14 02:31:31 +13:00
{
2020-05-06 12:39:38 +12:00
/// <summary>
/// dgv.AutoResizeColumns() was too slow ~45ms
/// </summary>
/// <param name="dgv"></param>
internal static void FastAutoSizeColumns(this DataGridView dgv)
2020-03-14 02:31:31 +13:00
{
2020-05-14 05:14:51 +12:00
System.Collections.Generic.IEnumerable<DataGridViewRow> rows =
2020-05-06 12:39:38 +12:00
dgv.Rows.Cast<DataGridViewRow>();
using (Graphics gfx = dgv.CreateGraphics())
2020-03-14 02:31:31 +13:00
{
int i = 1;
gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
float widthMax = dgv.Columns[i].HeaderCell.Size.Width;
foreach (DataGridViewRow row in rows)
{
float checkWidth = gfx.MeasureString(
2020-03-14 02:31:31 +13:00
row.Cells[i].Value.ToString() + "_",
2020-05-06 12:39:38 +12:00
dgv.RowTemplate.DefaultCellStyle.Font
).Width * Scaling.Factor;
2020-03-14 02:31:31 +13:00
if (checkWidth > widthMax)
{
widthMax = checkWidth;
}
}
if (widthMax > MenuDefines.MaxMenuWidth)
{
widthMax = MenuDefines.MaxMenuWidth;
}
2020-03-14 02:31:31 +13:00
dgv.Columns[i].Width = (int)(widthMax + 0.5);
2020-05-06 23:59:31 +12:00
2020-05-09 01:57:30 +12:00
string stringWithWidthLikeIcon = "____";
2020-05-06 23:59:31 +12:00
#pragma warning disable CA1303 // Do not pass literals as localized parameters
float Width0 = gfx.MeasureString(stringWithWidthLikeIcon,
#pragma warning restore CA1303 // Do not pass literals as localized parameters
dgv.RowTemplate.DefaultCellStyle.Font
).Width * Scaling.Factor;
dgv.Columns[0].Width = (int)Width0;
2020-03-14 02:31:31 +13:00
}
}
}
}