我有一个C#Winforms应用程序并使用ListView控件。当我将View属性设置为View.SmallIcon时,图标不会对齐到固定大小的列。这些物品遍布各处。
是否有一个属性可以在ListView控件上设置,以便在SmallIcon视图中生成固定大小的列。
更新
下面是描述我遇到的问题的屏幕截图。屏幕截图#1显示了Windows资源管理器,其中文件名的宽度是固定的,并且引入了省略号。虽然从技术上讲可能没有任何实际的列,但图标以“柱状”类型布局对齐。
Image http://www.barramsoft.com/pub/images/ListViewSmallIcons2.png
屏幕截图#2显示了我遇到的情况。图标有一个不太漂亮的布局: Image http://www.barramsoft.com/pub/images/ListViewSmallIcons.png
答案 0 :(得分:1)
使用列的唯一视图是“详细信息”视图。
“小图标”视图与“大图标”视图相同,除了较小的图标。图标可以定位在整个控件上。您可以通过更改视图在Windows资源管理器中自行玩这个;它使用ListView控件。
如果要强制图标以漂亮的小行排列,请将Alignment
属性与AutoArrange
属性结合使用。
将Alignment
设置为ListViewAlignment.Top
或ListViewAlignment.Left
,将AutoArrange
设置为true
,以使图标自动排列在此位置。
您可以在设计人员中或通过代码执行此操作:
myListView.Alignment = ListViewAlignment.Top;
myListView.AutoArrange = true;
答案 1 :(得分:1)
您可以尝试免费软件Better ListView Express component,它会显示SmallIcon视图中始终对齐的项目,与Windows资源管理器完全一样。
您还可以在所有视图中显示列标题(不仅仅是详细信息),这在.NET ListView中是不可能的。
ComponentOwl还提供了一个包含许多额外功能的完整版本。
答案 2 :(得分:1)
我通过控制文本长度来解决这个问题:
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);
答案 3 :(得分:0)
我也有这个问题。我通过使用fileNamesListView.Columns.Add(new 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;
}
}