Csharp/C#教程:禁止ListView使所选项目为零分享


禁止ListView使所选项目为零

我的项目是.NET / WinForms。

我有一个列表视图,总是填充项目。 我希望它总是有选择。 但是,如果我单击列表视图项下面的空白区域,它将失去选择。

该列表有多个selection = true和hide selection = false。

您需要阻止本机控件看到鼠标单击,以便它不会取消选择项目。 在项目中添加一个新类并粘贴下面显示的代码。 编译。 将其从工具箱顶部拖放到表单上,替换现有表单。

using System; using System.Drawing; using System.Windows.Forms; class MyListView : ListView { protected override void WndProc(ref Message m) { // Swallow mouse messages that are not in the client area if (m.Msg >= 0x201 && m.Msg <= 0x209) { Point pos = new Point(m.LParam.ToInt32()); var hit = this.HitTest(pos); switch (hit.Location) { case ListViewHitTestLocations.AboveClientArea : case ListViewHitTestLocations.BelowClientArea : case ListViewHitTestLocations.LeftOfClientArea : case ListViewHitTestLocations.RightOfClientArea : case ListViewHitTestLocations.None : return; } } base.WndProc(ref m); } } 

就像其他人所说的那样, SelectedIndexChanged事件就是你应该看到的,但你应该与ItemSelectionChanged事件合作使用它。 这是我刚刚编写的一些代码:

 // Holds the last selected index private int _previousIndex = -1; // Restores the previous selection if there are no selections private void listView1_SelectedIndexChanged(object sender, EventArgs e) { if (listView1.SelectedIndices.Count == 0) { if (_previousIndex >= 0) { listView1.SelectedIndices.Add(_previousIndex); } } } // Records the last selected index private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if (e.IsSelected) { _previousIndex = e.ItemIndex; } } 

对于纯代码重用目的,将此代码放入新的UserControl并且具有确定是否允许最后一个选择丢失的属性可能是值得的:

 public class CustomListView : ListView { protected CustomListView() { this.SelectedIndexChanged += new EventHandler(CustomListView_SelectedIndexChanged); this.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(CustomListView_ItemSelectionChanged); } void CustomListView_SelectedIndexChanged(object sender, EventArgs e) { if (this.MaintainLastSelection && this.SelectedIndices.Count == 0) { if (_previousIndex >= 0) { this.SelectedIndices.Add(_previousIndex); } } } void CustomListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if (e.IsSelected) { _previousIndex = e.ItemIndex; } } private int _previousIndex = -1; public bool MaintainLastSelection { get { return _maintainLastSelection; } set { _maintainLastSelection = value; } } private bool _maintainLastSelection; } 

如果您不需要多选,则以下内容有效。 它的优点是无需跟踪上次选择的项目。

 private void ListViewAny_SelectedIndexChanged(object sender, EventArgs e) { if ((sender as ListView).FocusedItem != null) { (sender as ListView).FocusedItem.Selected = true; } } 

  private void LV_MouseUp(object sender, MouseEventArgs e) { if (LV.FocusedItem != null) { if (LV.SelectedItems.Count == 0) LV.FocusedItem.Selected = true; } } 

(没有多选)

您需要处理ListView的SelectedIndexChanged事件,并且如果在此事件发生后没有选择任何项目,则以编程方式重新选择上一个已知选择。

ListView有一个SelectedIndexChanged事件。 听取这个,然后查询listView.SelectedItems.Count属性 – 如果它为零,则选择第一个/最后一个选定项。

上述就是C#学习教程:禁止ListView使所选项目为零分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1005756.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐