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

问题描述:

我有我自己的ListView类,继承自Forms.ListView。双击列之间的行时,列调整大小以显示完整大小的列项。双击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; 
      } 
     } 

编辑:这些都是在Form1.Designer.cs我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); 
+0

您是否尝试过它@drbaltar?我很好奇它是否适合您的特定情况。 –

+0

这看起来很有希望!但是,事件从不会因为某种原因而触发:S – Mystogan

+0

我也尝试启用“在拖动时显示窗口内容”,因为这似乎是事件触发所必需的,但似乎还不够。 – Mystogan