C# 调整大小时列表视图列文本的操作
我有一个列表视图,其中有多个具有长文本值的列,就像一个具有目标文件路径的列一样。它的值类似于C# 调整大小时列表视图列文本的操作,c#,C#,我有一个列表视图,其中有多个具有长文本值的列,就像一个具有目标文件路径的列一样。它的值类似于c:\users\kavya\new\coding\img1000.jpg 非常大的东西 当用户使用滚动条时,我想根据列的大小调整文本: 宽度非常大,所有数据c:\users\kavya\new\coding\img1000.jpg 应该是可见的,当他将列标题滚动到非常小的位置时,只需查看c:\img1000.jpg,但内存应该具有整个路径 实际上,我们看到类似于c:\users\kavya….. 我如何
c:\users\kavya\new\coding\img1000.jpg
非常大的东西
当用户使用滚动条时,我想根据列的大小调整文本:
宽度非常大,所有数据c:\users\kavya\new\coding\img1000.jpg
应该是可见的,当他将列标题滚动到非常小的位置时,只需查看c:\img1000.jpg
,但内存应该具有整个路径
实际上,我们看到类似于c:\users\kavya…..
我如何做到这一点?通过执行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';
访问:我想这个词叫做
省略号。这可以通过禁用属性中的省略号来避免。我不确定。如果列宽减小,使实际文件名可见,但内存应具有整个路径,是否有办法只能查看驱动器和文件名…先生,您已经给出了如何从整个路径获取所需字符串,但我想知道如何基于可见文本管理列宽…基于列标题滚动文本可见更改我希望总文本在特定列宽处可见,当它很小时,只有c:/filename可见。如何管理列表视图中可见的列宽和文本