Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用视图样式view.SmallIcon在Winforms ListView中将列设置为固定大小_C#_.net_Winforms_Listview - Fatal编程技术网

C# 如何使用视图样式view.SmallIcon在Winforms ListView中将列设置为固定大小

C# 如何使用视图样式view.SmallIcon在Winforms ListView中将列设置为固定大小,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我有一个WinC窗体应用程序,正在使用ListView控件。当我将View属性设置为View.SmallIcon时,图标不会对齐到固定大小的列中。这些物品散布在各处 是否在ListView控件上设置属性以使SmallIcon视图中的列大小固定 更新: 下面是描述我遇到的问题的截图。屏幕截图1显示了Windows资源管理器,其中文件名的宽度是固定的,并引入了省略号。虽然从技术上讲,可能没有任何实际的列在播放中,但图标以列式布局对齐。 资料来源: 截图2显示了我遇到的情况。图标的布局不太美观: 来源

我有一个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的评论,了解如何解决此问题,增加间距。