调整大小时的列表视图列文本操作

3
我有一个列表视图,并且有多列包含长文本值,比如目标文件路径列的数值为c:\users\kavya\new\coding\img1000.jpg等较长的文本。
我希望能够根据列的大小来调整文本。当用户使用滚动条时: 如果宽度很大,则所有数据都应该可见,例如c:\users\kavya\new\coding\img1000.jpg; 当用户将列标题缩小到非常小的尺寸时,只需查看c:\img1000.jpg,但是内存中应该保存整个路径,而不是像现在这样显示为c:\users\kavya….
我该如何做呢?

我认为这个词叫做“省略号”。可以通过在属性中禁用省略号来避免这种情况。但我不确定。 - Mr_Green
如果列宽减小以使实际文件名可见,是否有一种方法只查看驱动器和文件名,但内存应具有整个路径? - user1746284
1个回答

1
通过调用Windows API函数PathCompactPathEx,
[DllImport("shlwapi.dll", CharSet = CharSet.Auto)]
 static extern bool PathCompactPathEx([Out] StringBuilder pszOut, string szPath, int cchMax, int dwFlags);

static string PathShortener(string path, int length)
 {
     StringBuilder sb = new StringBuilder();
     PathCompactPathEx(sb, path, length, 0);
     return sb.ToString();
 }

或者你可以尝试这样做:

string PathShortener(string path)
 {
     const string pattern = @"^(\w+:|\\)(\\[^\\]+\\[^\\]+\\).*(\\[^\\]+\\[^\\]+)$";
     const string replacement = "$1$2...$3";
     if (Regex.IsMatch(path, pattern))
     {
         return Regex.Replace(path, pattern, replacement);
     }
     else
     {
         return path;
     }          
 } 

或者您可以像以下这样使用:

string ellipsisedPath = OriginalPath + '\0';

访问:在WinForms程序中添加省略号而不使用Win32 API调用(重新访问)


先生,您已经提供了如何从整个路径中获取所需字符串的方法,但我想知道如何根据可见文本管理列宽度...... - user1746284
根据列标题滚动,可见文本会发生变化。我想在特定的列宽下看到完整的文本,并且当宽度较小时,只显示 c:/filename。如何管理列表视图中的列宽和可见文本。 - user1746284

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接