我正在查看 .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/