【问题标题】:C# ListView Label Edit - control selected textC# ListView 标签编辑——控制选中的文本
【发布时间】:2012-12-18 10:03:26
【问题描述】:

我正在查看 .Net Framework ListView(我一直在尝试 BetterListView,即 express 版本,并且不断遇到我做不到的事情,所以我想我不妨也遇到我可以做的事情” t 在文档更好的 MS ListView 中做!)有些事情让我很困惑。

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

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

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

【问题讨论】:

  • 澄清一下,我正在从 TextBox (msdn.microsoft.com/en-us/library/…) 中寻找 SelectionStart 和 SelectionLength 之类的东西
  • 为了进一步澄清,我只需要编辑主项,而不是子项

标签: c# listview text edit


【解决方案1】:

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

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

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

【讨论】:

  • 我需要这种确切的行为,但你的解决方案在我的情况下不起作用,这很奇怪......
  • 我也试过这个代码:codeproject.com/articles/11623/…(非常相似),它可以工作,但选择设置没有。提示任何人?
【解决方案2】:

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

【讨论】:

  • 谢谢,我现在就去研究它,但是当然这会失去 ListView 的功能,因为它可以随时提供各种布局。我想知道是否有某种可以使用的 SendMessage 魔法......
【解决方案3】:

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

【讨论】:

  • 感谢您的回答。我经常查看该控件,它可能会执行我想要的操作,但如果我正确理解 GPLv3(它的许可证),我将不得不将完整的源代码发布到我的应用程序中。我可以免费赠送编译后的代码,也可以免费赠送,但不希望发布源代码。
  • 我和作者有过同样的对话。我在闭源项目中使用控件。我记得他并不太担心,但我建议联系他进行确认。
  • 您可以在闭源项目中使用 objectlistview(我一直这样做)。交易是您应该向作者支付这样做的权利。这是一次性费用,我觉得很合理(如果我没记错的话,我想是 100 美元)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
相关资源
最近更新 更多