mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-09-29 16:51:18 +13:00
d1b8c0b279
[Feature] Code Analyze and Refactor 0.11 (#88) [Feature] Mouse disturbing while using keys (#69) [Feature] Reload menu when reenter or click (#103) [BUG] Crash when fast mouse movings (#104) [BUG] Loading was shown too often (#105) [BUG] submenu wrong location in edgecase (#97) [BUG] Folder shown as open (green) but is not open (#106)
50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
|
|
namespace SystemTrayMenu.Utilities
|
|
{
|
|
internal static class DataGridViewExtensions
|
|
{
|
|
/// <summary>
|
|
/// dgv.AutoResizeColumns() was too slow ~45ms
|
|
/// </summary>
|
|
/// <param name="dgv"></param>
|
|
internal static void FastAutoSizeColumns(this DataGridView dgv)
|
|
{
|
|
System.Collections.Generic.IEnumerable<DataGridViewRow> rows =
|
|
dgv.Rows.Cast<DataGridViewRow>();
|
|
using (Graphics gfx = dgv.CreateGraphics())
|
|
{
|
|
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(
|
|
row.Cells[i].Value.ToString() + "_",
|
|
dgv.RowTemplate.DefaultCellStyle.Font
|
|
).Width * Scaling.Factor;
|
|
if (checkWidth > widthMax)
|
|
{
|
|
widthMax = checkWidth;
|
|
}
|
|
}
|
|
if (widthMax > MenuDefines.MaxMenuWidth)
|
|
{
|
|
widthMax = MenuDefines.MaxMenuWidth;
|
|
}
|
|
dgv.Columns[i].Width = (int)(widthMax + 0.5);
|
|
|
|
string stringWithWidthLikeIcon = "____";
|
|
#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;
|
|
}
|
|
}
|
|
}
|
|
}
|