C# ListView Label Edit - 控制选中的文本

标签 c# listview text edit

我正在查看 .Net Framework ListView(我一直在尝试 BetterListView,express 版本,并不断遇到我做不到的事情,所以我想我也可能遇到我能做的事情'不要在有更好记录的 MS ListView 中做!)有些事情让我很困惑。

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

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

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

最佳答案

通过适当的消息进行长时间拖网,答案是...

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

这正是我所追求的。感谢其他回复者抽出时间回答。

关于C# ListView Label Edit - 控制选中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13930460/

相关文章:

c# - 快速获取特定路径下的所有文件和目录

c# - 是否有 WPF 复选框控件切换事件?

java - 使用复选框实现部分 ListView?

android - ListView android中的错误更新图像

c - 从c中的文件导入所有字符串

重新包装硬包装文本的算法?

c# - FindAll 搜索问题

c# - Textbox1.Focus();不起作用; Page.SetFocus(Textbox1); 则不然为什么?

C# listview imagelist 快速添加多个项目

Java - 在 Swing 中加入多个绘图字符串