C# 双击ListView无法正常工作时调整大小

C# 双击ListView无法正常工作时调整大小,c#,forms,listview,C#,Forms,Listview,我有自己的ListView类,继承自Forms.ListView。双击列之间的行时,列将调整大小以显示完整大小的列项目 然而,对我来说,这并不能正常工作——有些词是部分隐藏的 我的理论是,这是由于项目具有不同的字体,而ListView没有全部查看,导致一些较大的字体项目仍然部分隐藏 有人找到了这个问题的解决方案吗(当双击列之间时,我似乎找不到任何事件)?我的理论可信吗 致以最诚挚的问候我想您可以尝试一下这段代码,我现在就编写了它,经过测试,它对我很有效。请注意,在我的计算机上,Columnwid

我有自己的ListView类,继承自Forms.ListView。双击列之间的行时,列将调整大小以显示完整大小的列项目

然而,对我来说,这并不能正常工作——有些词是部分隐藏的

我的理论是,这是由于项目具有不同的字体,而ListView没有全部查看,导致一些较大的字体项目仍然部分隐藏

有人找到了这个问题的解决方案吗(当双击列之间时,我似乎找不到任何事件)?我的理论可信吗


致以最诚挚的问候

我想您可以尝试一下这段代码,我现在就编写了它,经过测试,它对我很有效。请注意,在我的计算机上,
ColumnwidthChanging
事件会在每个更改的像素上触发(当您使用鼠标调整列的大小时),双击它会更改两个以上的像素。我会传递为列表设置的字体。您应该使用特定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;
            }
        }

@波尔塔博士,你试过了吗?我很好奇它是否适用于你的特殊情况。这看起来很有希望!但是,由于某些原因,事件从未触发:SI还尝试启用“拖动时显示窗口内容”,因为这似乎是触发事件所必需的,但似乎还不够。@drbaltar我在尝试代码时已从listView发布了设置。效果很好。你确定你正在设置问题编辑中所示的事件吗?谢谢,尼克!现在效果很好!
 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);