【问题标题】:How to remove 1px space between ListViewItem如何删除 ListViewItem 之间的 1px 空间
【发布时间】:2014-06-03 15:11:30
【问题描述】:
在 ListView 中,ListViewItems 之间有 1px 的空间,这导致我经常错过它们之间的点击。这只发生在 ListViewGroup 中的 ListViewItem 时。
我录制了视频来展示它:https://mediacru.sh/wSDSRZ5gwJdf/direct
在视频中,我可以在两个项目之间单击,这会使 ListViewItem 未选中。
如果我不使用 ListViewGroup,则不会发生此问题。
【问题讨论】:
标签:
c#
.net
winforms
listview
listviewitem
【解决方案1】:
据我所知,没有这样的属性可以设置。也许你可以自己画ListViewGroup。或者尝试不分组解决,但这显然对您来说很不方便。
或者将选择存储在一个变量中,创建一个后台工作人员/单击事件来检查 ListViewGroup 上的按钮点击,如果没有选择任何内容,则将其设置回上一个。
【解决方案2】:
没有这样的属性可以分配这样的值。但是,您可以通过在 DrawItem 事件中绘制每个 ListViewItem 来自定义列表项。您需要先为此分配OwenerDraw 事件。
查看msdn中给出的示例
【解决方案3】:
我现在正在使用这个解决方法:
private void lvMain_MouseUp(object sender, MouseEventArgs e)
{
if (lvMain.SelectedItems.Count == 0 && (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right))
{
ListViewItem lvi = lvMain.GetItemAt(e.X, e.Y);
if (lvi == null)
{
// Workaround for 1px space between items
lvi = lvMain.GetItemAt(e.X, e.Y - 1);
}
if (lvi != null)
{
lvi.Selected = true;
}
}
}
如果点击两个项目之间的空白空间然后检查该位置顶部的一个像素,如果项目存在于该位置然后选择它。