当前位置: 首页 > 编程语言 > C#

阻止listview丢失所选项目分享

时间:2023-04-10 22:34:36 C#

C#学习教程:阻止listview丢失所选项目列表视图控件有一个默认为True的HideSelection属性。将它设置为False就可以了……在某些情况下,这就足够了。我以为有一个属性可以防止这种情况发生,但现在我找不到了。你可以试试这个:privatevoidListView_SelectionChanged(objectsender,SelectionChangedEventArgse){if(listView.SelectedItems.Count==0)foreach(objectitemine.RemovedItems)listView.SelectedItems.Add(item);我完成了这样的事情:privatevoidlvReads_MouseUp(objectsender,MouseEventArgse){if(lvReads.SelectedItems.Count==0)if(lvReads.Items.Count>0)lvReads.Items.Find(currentName,false)[0].已选择=真;}andprivatevoidlvReads_SelectedIndexChanged(objectsender,EventArgse){if(lvReads.SelectedItems.Count==1){selectedIndex=lvReads.SelectedIndices[0];if(currentName!=lvReads.Items[selectedIndex].Name){//加载项目}currentName=lvReads.Items[selectedIndex].Name;这在WinForms中比在WPF中要难得多。WinForms有一个SelectedIndexChanged事件,它不会告诉您已选择任何内容,并且每次选择或取消选择一行时都会触发它。因此,如果选择了一行并选择了另一行,您将收到两个SelectedIndexChanged事件:一个是在取消选择所选行之后,另一个是在选择新行时。问题是在事件#1期间,ListView没有选择任何内容,并且您不知道是否会发生事件#2以选择第二行。你能做的最好的事情就是等待应用程序空闲(选择更改后几毫秒),如果列表视图仍然没有选择任何内容,请放回最后选择的行。privatevoidlistView1_SelectedIndexChanged(objectsender,EventArgse){ListViewlv=(ListView)sender;如果(lv.SelectedIndices.Count==0){如果(!this.appIdleEventScheduled){this.appIdleEventScheduled=true;this.listViewToMunge=lv;Application.Idle+=newEventHandler(Application_Idle);}}否则this.lastSelectedIndex=lv.SelectedIndices[0];}voidApplication_Idle(objectsender,EventArgse){Application.Idle-=newEventHandler(Application_Idle);这。appIdleEventScheduled=false;如果(listViewToMunge.SelectedIndices.Count==0)listViewToMunge.SelectedIndices.Add(this.lastSelectedIndex);}privateboolappIdleEventScheduled=false;私有intlastSelectedIndex=-1;并进行一些低级的消息处理以上是C#学习教程:防止listview丢失所有选中item共享的内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注—classListViewThatKeepsSelection:ListView{protectedoverridevoidWndProc(refMessagem){//抑制鼠标消息如果(m.Msg>=0x201&&m.Msg>16);在项目区域之外的svarhit=this.HitTest(pos);开关(hit.Location){}}base.WndProc(refm);转载请注明出处: