3

我有一个列表视图,并且有多个具有长文本值的列,例如具有目标文件路径的列,它的值c:\users\kavya\new\coding\img1000.jpg 非常大。

当用户使用滚动条时,我想根据列的大小调整文本:宽度很大,所有数据c:\users\kavya\new\coding\img1000.jpg 都应该可见,当他将列标题滚动到很小时,只有c:\img1000.jpg必须查看但内存应该有整个路径,实际上我们看到类似c:\users\kavya…...

我怎样才能做到这一点?

4

1 回答 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';

访问:在没有 Win32 API 调用的情况下将省略号添加到 WinForms 程序中的路径(重新访问)

于 2012-10-15T07:40:50.603 回答