2020-07-07 07:15:45 +12:00
|
|
|
|
// <copyright file="DataGridViewExtensions.cs" company="PlaceholderCompany">
|
|
|
|
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
|
|
|
// </copyright>
|
2020-03-14 02:31:31 +13:00
|
|
|
|
|
2020-03-28 12:42:32 +13:00
|
|
|
|
namespace SystemTrayMenu.Utilities
|
2020-03-14 02:31:31 +13:00
|
|
|
|
{
|
2022-08-08 03:49:42 +12:00
|
|
|
|
using System;
|
2020-07-07 07:15:45 +12:00
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Windows.Forms;
|
2022-06-18 23:03:28 +12:00
|
|
|
|
using SystemTrayMenu.DataClasses;
|
2020-07-07 07:15:45 +12:00
|
|
|
|
|
2020-03-30 06:26:45 +13:00
|
|
|
|
internal static class DataGridViewExtensions
|
2020-03-14 02:31:31 +13:00
|
|
|
|
{
|
2022-06-18 00:38:09 +12:00
|
|
|
|
private const float WidthMin = 100f;
|
|
|
|
|
|
2020-05-06 12:39:38 +12:00
|
|
|
|
/// <summary>
|
2020-07-07 09:37:55 +12:00
|
|
|
|
/// dgv.AutoResizeColumns() was too slow ~45ms.
|
2020-05-06 12:39:38 +12:00
|
|
|
|
/// </summary>
|
2020-07-07 09:37:55 +12:00
|
|
|
|
/// <param name="dgv">datagridview.</param>
|
2020-03-30 06:26:45 +13:00
|
|
|
|
internal static void FastAutoSizeColumns(this DataGridView dgv)
|
2020-03-14 02:31:31 +13:00
|
|
|
|
{
|
2022-07-28 07:35:09 +12:00
|
|
|
|
using Graphics graphics = dgv.CreateGraphics();
|
|
|
|
|
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
|
2022-06-18 00:38:09 +12:00
|
|
|
|
float widthMax = WidthMin;
|
2022-06-18 23:03:28 +12:00
|
|
|
|
DataTable data = (DataTable)dgv.DataSource;
|
|
|
|
|
foreach (DataRow row in data.Rows)
|
2020-03-14 02:31:31 +13:00
|
|
|
|
{
|
2022-07-28 07:35:09 +12:00
|
|
|
|
float checkWidth = graphics.MeasureString(
|
2022-06-18 23:03:28 +12:00
|
|
|
|
((RowData)row[2]).Text + "___",
|
2022-06-18 00:38:09 +12:00
|
|
|
|
dgv.RowTemplate.DefaultCellStyle.Font).Width;
|
2020-07-07 07:15:45 +12:00
|
|
|
|
if (checkWidth > widthMax)
|
2020-06-21 03:38:21 +12:00
|
|
|
|
{
|
2020-07-07 07:15:45 +12:00
|
|
|
|
widthMax = checkWidth;
|
2020-06-21 03:38:21 +12:00
|
|
|
|
}
|
2020-07-07 07:15:45 +12:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 23:00:49 +12:00
|
|
|
|
int widthMaxInPixel = (int)(Scaling.Factor * Scaling.FactorByDpi *
|
2022-08-02 06:16:04 +12:00
|
|
|
|
400f * (Properties.Settings.Default.WidthMaxInPercent / 100f));
|
2022-08-08 03:49:42 +12:00
|
|
|
|
widthMax = Math.Min(widthMax, widthMaxInPixel);
|
2022-06-18 23:03:28 +12:00
|
|
|
|
dgv.Columns[1].Width = (int)(widthMax + 0.5);
|
2022-01-23 03:43:44 +13:00
|
|
|
|
double factorIconSizeInPercent = Properties.Settings.Default.IconSizeInPercent / 100f;
|
2022-07-28 07:35:09 +12:00
|
|
|
|
|
|
|
|
|
// IcoWidth 100% = 21px, 175% is 33, +3+2 is padding from ColumnIcon
|
|
|
|
|
float icoWidth = (16 * Scaling.FactorByDpi) + 5;
|
|
|
|
|
dgv.Columns[0].Width = (int)((icoWidth * factorIconSizeInPercent * Scaling.Factor) + 0.5);
|
2020-03-14 02:31:31 +13:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|