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

时间:2012-12-18 10:03:26

标签: c# listview text edit

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

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

这样的一个示例是在Windows资源管理器中,当您有文件扩展名可见时,您开始重命名文件 - 文件名被选中(蓝色背景)但文件扩展名不是,如果用户启动要立即输入,名称将被替换,但扩展名保持不变。

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

3 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:0)

您可以使用gridview。 GridView有ItemEdit。您也可以尝试一些组件,如telerik或devexpress ..

答案 2 :(得分:0)

在这里查看ObjectListView:http://objectlistview.sourceforge.net/cs/index.html它易于使用,非常灵活,而且大部分都是免费的。