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 に答える