列表视图选择矩形

时间:2012-03-09 23:21:30

标签: c# winforms listview windows-7

  

可能重复:
  How can I remove the selection border on a ListViewItem

我正在使用以下代码使Listview使用Windows 7本机外观并防止闪烁。

Windows 7 Native Look for .NET ListView

http://geekswithblogs.net/CPound/archive/2006/02/27/70834.aspx

但我仍然会得到一个黑色虚线选择矩形。

dotted

explorer

问题是......如何实现资源管理器选择矩形?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

根据AVIDeveloper提供的链接中的评论。

  

虽然ShowFocusCues本身不起作用,但WM_CHANGEUISTATE   在那个MSDN页面上列出的我找到了正确的答案。发送一个   带有UISF_HIDEFOCUS的WM_CHANGEUISTATE消息我能够摆脱它   焦点矩形。 - Telanor 2010年4月22日17:11

我试图找到有关此邮件的一些信息,并最终看到了这篇文章:http://cboard.cprogramming.com/csharp-programming/128345-listview-remove-focuscues.html#post958690

因此,我们需要将WM_CHANGEUISTATE消息发送到构造函数中的ListView

SendMessage(Handle, 0x127, 0x10001, 0);

我们只会覆盖OnSelectedIndexChanged和OnEnter事件。

protected override void OnSelectedIndexChanged(EventArgs e)
{
    base.OnSelectedIndexChanged(e);
    SendMessage(Handle, 0x127, 0x10001, 0);
}
protected override void OnEnter(EventArgs e)
{
    base.OnEnter(e);
    SendMessage(Handle, 0x127, 0x10001, 0);
}

如果不重写OnEnter事件,当ListView获得焦点时,将出现相同的黑色虚线选择矩形。

我试着用最好的解释,因为我不会说一口流利的英语,如果有人在接受我之前有更好的答案,我会等待。