我有一个列表视图,并且有多个具有长文本值的列,例如具有目标文件路径的列,其值为c:\users\kavya\new\coding\img1000.jpg
非常大的东西。
当用户使用滚动条时,我想根据列的大小调整文本:
宽度非常大的所有数据c:\users\kavya\new\coding\img1000.jpg
应该是可见的,当他将列标题滚动到非常小的时候只需要查看c:\img1000.jpg
,但内存应该有整个路径
我们看到类似c:\users\kavya…..
的内容。
我该怎么做?
答案 0 :(得分: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();
}
OR 您可以尝试这样:
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;
}
}
OR 您可以使用以下内容:
string ellipsisedPath = OriginalPath + '\0';
访问:Add Ellipsis to a Path in a WinForms Program without Win32 API call (revisited)