Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 有没有办法将列表框(或备选方案)限制为选择连续的项目?_.net_Winforms_Listbox - Fatal编程技术网

.net 有没有办法将列表框(或备选方案)限制为选择连续的项目?

.net 有没有办法将列表框(或备选方案)限制为选择连续的项目?,.net,winforms,listbox,.net,Winforms,Listbox,有没有什么好方法可以配置一个列表框(WinForms),这样就可以通过单击+拖动或shift+单击来选择多个项目,但只能选择连续的项目范围?从本质上讲,我希望列表框的选择行为(从用户的角度来看)与文本框的选择行为类似,但有一个限制,即只能选择整行 现在我使用UserDrawVariable列表框作为事件日志,但是UserDrawVariable列表框的滚动行为有些不稳定。我想将其更改为UserDrawFixed ListBox,使用多个项来表示应该更高的项(为后面的项设置“ItemExtensi

有没有什么好方法可以配置一个列表框(WinForms),这样就可以通过单击+拖动或shift+单击来选择多个项目,但只能选择连续的项目范围?从本质上讲,我希望列表框的选择行为(从用户的角度来看)与文本框的选择行为类似,但有一个限制,即只能选择整行

现在我使用UserDrawVariable列表框作为事件日志,但是UserDrawVariable列表框的滚动行为有些不稳定。我想将其更改为UserDrawFixed ListBox,使用多个项来表示应该更高的项(为后面的项设置“ItemExtension”类型,该类型将包含对第一个项的引用,这将向它们公开其绘制例程)。但是,我能想到的使选择行为合理工作的唯一方法是跟踪选择范围的开始和结束,并将至少部分选中的任何项目绘制为高亮显示。如果用户单击由两部分组成的“项目”的上半部分,然后控件单击下半部分,则使用单个项目选择标志似乎不可靠;单击任意一半都会高亮显示该项目,而控件单击则会取消高亮显示该项目,但由于单击会在单独的项目上注册,我认为不会发生这种情况

也许ListBox真的不是正确的控件。我愿意接受一些关于更好的开放源码控件的建议,这些控件具有不受限制的许可证(我无法打开我的应用程序)。

建议1)在控件上按Ctrl键并单击,并且仅当a)没有选择或b)单击的项与当前选择相邻时才允许它通过


建议2)将最后一个选择保留在listbox子类的字段中,在selection changed事件中,验证新选择是否有效(连续),如果无效,则将最后一个选择设置为给人没有更改的印象。如果选择有效,则将其升级到最后一个选择字段。

我最终尝试了类似的操作,但是用一点逻辑来试图弄清楚所选内容的数量是随着用户交互的结果而增加还是减少,这样会创建无效选择组的单击会创建一些逻辑连接的选择组;我对结果不满意,因此我认为最好只是更改代码,以便处理非连续选择。不过,我还是觉得奇怪……列表框提供了两种允许非连续选择的模式,但没有一种模式只允许选择多个连续项目(例如文本框)。