5

私は .Net Framework の ListView を見ています (私は高速バージョンの BetterListView を試していて、実行できないことに対して実行し続けているので、実行できないことに対して実行することも考えられます。文書化された MS ListView の方が優れています!) そして、私を困惑させているものがあります。

アイテムを編集可能にしたいのですが、編集を開始するときに、選択したテキストがアイテム テキストのすべてではなく一部だけになるようにしたいと考えています。

この例は、Windows エクスプローラーで、ファイル拡張子が表示されていて、ファイルの名前を変更し始めた場合です。ファイル名は選択されていますが (青色の背景)、ファイル拡張子は選択されていません。ユーザーがすぐに入力を開始した場合などです。名前は置き換えられますが、拡張子はそのままです。

回避策は考えられますが、それを行う方法があるかどうか疑問に思いました。

4

3 に答える 3

7

適切なメッセージを1回長い間トロールすると、答えは...

private void listView1_BeforeLabelEdit(object sender, LabelEditEventArgs e)
{
    IntPtr editWnd = IntPtr.Zero;
    editWnd = SendMessage(listView1.Handle, LVM_GETEDITCONTROL, 0, IntPtr.Zero);
    int textLen = Path.GetFileNameWithoutExtension(listView1.Items[e.Item].Text).Length;
    SendMessage(editWnd, EM_SETSEL, 0, (IntPtr) textLen);
}

public const int EM_SETSEL = 0xB1;
public const int LVM_FIRST = 0x1000;
public const int LVM_GETEDITCONTROL = (LVM_FIRST + 24);

[DllImport("user32.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int len, IntPtr order);

それはまさに私が求めていたものです。回答に時間を割いてくださった他の回答者に感謝します。

于 2012-12-18T18:04:02.430 に答える
0

ここで ObjectListView を見てみましょう: http://objectlistview.sourceforge.net/cs/index.html 使いやすく、非常に柔軟で、ほとんどの場合無料です。

于 2012-12-18T10:31:42.387 に答える
0

これには gridview を使用できます。GridView には ItemEdit があります。また、telek や devexpress などのコンポーネントを試すこともできます。

于 2012-12-18T10:13:14.917 に答える