C#ListView标签编辑 - 控制所选文本

Jam*_*rke 5 c# text listview edit

我正在查看.Net Framework ListView(我一直在尝试BetterListView,快速版本,并且继续遇到我不能做的事情,所以我想我可能会遇到我不能做的事情更好的记录MS ListView!)并且有一些东西让我感到难过.

我希望这些项目可以编辑,但我想在编辑开始时,所选文本只是项目文本的一部分而不是全部.

一个例子是在Windows资源管理器中,当文件扩展名可见时,您开始重命名文件 - 选择文件名(蓝色背景)但文件扩展名不是,这样如果用户立即开始输入然后名称将被替换,但扩展名保持原样.

我可以想到解决方法,但想知道是否有办法做到这一点.

Jam*_*rke 7

通过适当的消息长期拖网,答案是......

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);
Run Code Online (Sandbox Code Playgroud)

这正是我所追求的.感谢其他响应者花时间回答.