5

我正在查看 .Net Framework ListView(我一直在尝试 BetterListView,即 express 版本,并且不断遇到我无法做的事情,所以我认为我不妨遇到我无法做的事情记录更好的 MS ListView!),有些事情让我很困惑。

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

这方面的一个例子是在 Windows 资源管理器中,当您看到文件扩展名并开始重命名文件时 - 选择了文件名(蓝色背景)但没有选择文件扩展名,这样如果用户立即开始键入然后名称将被替换,但扩展名保持不变。

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

4

3 回答 3

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);

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

于 2012-12-18T18:04:02.430 回答
0

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

于 2012-12-18T10:13:14.917 回答
0

在此处查看 ObjectListView:http: //objectlistview.sourceforge.net/cs/index.html 它易于使用、非常灵活且大部分免费。

于 2012-12-18T10:31:42.387 回答