C# 如何使用视图样式view.SmallIcon在Winforms ListView中将列设置为固定大小
我有一个WinC窗体应用程序,正在使用ListView控件。当我将View属性设置为View.SmallIcon时,图标不会对齐到固定大小的列中。这些物品散布在各处 是否在ListView控件上设置属性以使SmallIcon视图中的列大小固定 更新: 下面是描述我遇到的问题的截图。屏幕截图1显示了Windows资源管理器,其中文件名的宽度是固定的,并引入了省略号。虽然从技术上讲,可能没有任何实际的列在播放中,但图标以列式布局对齐。 资料来源: 截图2显示了我遇到的情况。图标的布局不太美观:C# 如何使用视图样式view.SmallIcon在Winforms ListView中将列设置为固定大小,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我有一个WinC窗体应用程序,正在使用ListView控件。当我将View属性设置为View.SmallIcon时,图标不会对齐到固定大小的列中。这些物品散布在各处 是否在ListView控件上设置属性以使SmallIcon视图中的列大小固定 更新: 下面是描述我遇到的问题的截图。屏幕截图1显示了Windows资源管理器,其中文件名的宽度是固定的,并引入了省略号。虽然从技术上讲,可能没有任何实际的列在播放中,但图标以列式布局对齐。 资料来源: 截图2显示了我遇到的情况。图标的布局不太美观: 来源
来源:使用列的唯一视图是详细信息视图 小图标视图与大图标视图相同,只是图标较小。图标可以放置在整个控件上。通过更改视图,您可以在Windows资源管理器中自己使用它;它使用ListView控件 如果要强制图标排成一行,请将属性与属性合并 将Alignment设置为ListViewAlignment.Top或ListViewAlignment.Left,并将AutoArrange设置为true,以使图标自动排列在此位置 您可以在设计器中或通过代码执行此操作:
myListView.Alignment = ListViewAlignment.Top;
myListView.AutoArrange = true;
唯一使用列的视图是“详细信息”视图 小图标视图与大图标视图相同,只是图标较小。图标可以放置在整个控件上。通过更改视图,您可以在Windows资源管理器中自己使用它;它使用ListView控件 如果要强制图标排成一行,请将属性与属性合并 将Alignment设置为ListViewAlignment.Top或ListViewAlignment.Left,并将AutoArrange设置为true,以使图标自动排列在此位置 您可以在设计器中或通过代码执行此操作:
myListView.Alignment = ListViewAlignment.Top;
myListView.AutoArrange = true;
你可以试试免费软件,它在SmallIcon视图中显示的项目总是对齐的,就像Windows资源管理器一样
您还可以在所有视图中显示列标题,而不仅仅是详细信息,这在.NET ListView中是不可能的
ComponentOwl还提供了一个包含许多额外功能的完整版本。您可以尝试免费软件,它在SmallIcon视图中显示的项目始终对齐,与Windows资源管理器完全相同
您还可以在所有视图中显示列标题,而不仅仅是详细信息,这在.NET ListView中是不可能的
ComponentOwl还提供了一个包含许多额外功能的完整版本。我也遇到了这个问题。我通过使用fileNamesListView.Columns.Addnew ColumnHeader向ListView添加一列来解决这个问题;然后将fileNamesListView.Columns[0].Width设置为最长项目文本及其图像的宽度。缺点是所有列都是最宽列的宽度
private void PopulateListView(List<string> fileNames)
{
using (Graphics g = this.CreateGraphics())
{
int longestTextWidth = 0;
int longestTextIndex = 0;
for (int i = 0; i < fileNames.Count; i++)
{
ListViewItem item = new ListViewItem(fileNames[i]);
item.ImageIndex = 0; // Do whatever you do to choose the image.
fileNamesListView.Items.Add(item);
// Find the longest file name.
int textWidth = Size.Round(g.MeasureString(fileNames[i], fileNamesListView.Font)).Width;
if (textWidth > longestTextWidth)
{
longestTextWidth = textWidth;
longestTextIndex = i;
}
}
// Find the width of the image used.
int imageWidth = filesImageList.Images[fileNamesListView.Items[longestTextIndex].ImageIndex].Width;
fileNamesListView.Columns[0].Width = longestTextWidth + imageWidth;
}
}
我也有这个问题。我通过使用fileNamesListView.Columns.Addnew ColumnHeader向ListView添加一列来解决这个问题;然后将fileNamesListView.Columns[0].Width设置为最长项目文本及其图像的宽度。缺点是所有列都是最宽列的宽度
private void PopulateListView(List<string> fileNames)
{
using (Graphics g = this.CreateGraphics())
{
int longestTextWidth = 0;
int longestTextIndex = 0;
for (int i = 0; i < fileNames.Count; i++)
{
ListViewItem item = new ListViewItem(fileNames[i]);
item.ImageIndex = 0; // Do whatever you do to choose the image.
fileNamesListView.Items.Add(item);
// Find the longest file name.
int textWidth = Size.Round(g.MeasureString(fileNames[i], fileNamesListView.Font)).Width;
if (textWidth > longestTextWidth)
{
longestTextWidth = textWidth;
longestTextIndex = i;
}
}
// Find the width of the image used.
int imageWidth = filesImageList.Images[fileNamesListView.Items[longestTextIndex].ImageIndex].Width;
fileNamesListView.Columns[0].Width = longestTextWidth + imageWidth;
}
}
我通过如下控制文本长度来解决此问题:
int max_length = 30; // you can use any value here
ListViewItem l = lsvLocalFile.Items.Add("some text value");
l.ImageIndex = index_of_smallimagelist;
if (l.Text.Length > max_length)
l.Text = l.Text.Remove(max_length - 3) + "...";
else
l.Text = l.Text.PadRight(max_length);
我通过如下控制文本长度来解决此问题:
int max_length = 30; // you can use any value here
ListViewItem l = lsvLocalFile.Items.Add("some text value");
l.ImageIndex = index_of_smallimagelist;
if (l.Text.Length > max_length)
l.Text = l.Text.Remove(max_length - 3) + "...";
else
l.Text = l.Text.PadRight(max_length);
SmallIcon视图不使用列。至少它提供了这样的外观。为了让问题更清楚,我加入了截图。可能重复:SmallIcon视图不使用列。至少它给出了这样的外观。我已经包括了屏幕截图,以使问题更清楚。可能重复:我尝试了这个,但它似乎没有解决我的问题。我已经用截图更新了我的问题,以更好地显示我遇到了什么。@Elan:它在两个截图中做了完全相同的事情。问题是你的一些标题太长了,不适合。请参阅Hans的评论,了解如何解决此问题,增加间距。我尝试了此方法,但似乎无法解决我遇到的问题。我已经用截图更新了我的问题,以更好地显示我遇到了什么。@Elan:它在两个截图中做了完全相同的事情。问题是你的一些标题太长了,不适合。请参阅Hans的评论,了解如何解决此问题,增加间距。