このコードを試すことができると思います。今書いてテストしたところ、うまくいきました。私のコンピューターでは、ColumnwidthChanging
変更されたピクセルごとにイベントが発生し(マウスを使用して列のサイズを変更すると)、ダブルクリックすると2ピクセル以上変更されることに注意してください。リストに設定されているフォントを渡しています。特定の ListViewItem のフォントで行う必要があります。それを試してみて、それがうまくいくなら、それだけです。
private void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
ListView lv = (ListView)sender;
int widthDifference = Math.Abs(lv.Columns[ e.ColumnIndex].Width - e.NewWidth);
if( widthDifference>2)
{
int maxWidth = 0;
Graphics g = lv.CreateGraphics();
for(int i = 0;i<lv.Items.Count;i++)
{
string text = string.Empty;
if (e.ColumnIndex == 0)
{
text = lv.Items[i].Text;
}
else
{
text = lv.Items[i].SubItems[e.ColumnIndex - 1].Text;
}
SizeF sizeF = g.MeasureString(text, lv.Font);
if (maxWidth < (int)(sizeF.Width + 0.5))
maxWidth = (int)(sizeF.Width + 0.5);
}
g.Dispose();
e.NewWidth = maxWidth;
}
}
編集:これらはListView
Form1.Designer.cs の私の設定です。これが役立つと思います:
this.listView1.FullRowSelect = true;
this.listView1.GridLines = true;
this.listView1.Location = new System.Drawing.Point(253, 160);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(428, 97);
this.listView1.TabIndex = 9;
this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details;
this.listView1.ColumnWidthChanging += new System.Windows.Forms.ColumnWidthChangingEventHandler(this.listView1_ColumnWidthChanging);