我有一个列表视图,并且有多个具有长文本值的列,例如具有目标文件路径的列,它的值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';