Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# 调整大小时列表视图列文本的操作_C# - Fatal编程技术网

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可见。如何管理列表视图中可见的列宽和文本