如何让数据网格表现得像 ctrl 键处于活动状态?
Posted
技术标签:
【中文标题】如何让数据网格表现得像 ctrl 键处于活动状态?【英文标题】:How can I get a datagrid to behave like the ctrl key is active? 【发布时间】:2011-01-21 15:03:19 【问题描述】:我希望我的数据网格在默认情况下表现得就像用户按住控制键一样。因此,当单击一个项目时,另一个项目它们都是选择的一部分,再次单击它们会将它们从选择中删除。
我已经有了allowMultipleSelection = true
,但我似乎找不到任何可以做到这一点的设置。与此同时,我正在处理 itemclick 事件,但似乎我缺少一个易于使用的设置。
有什么想法吗?
【问题讨论】:
【参考方案1】:您可以尝试将事件侦听器添加到具有最高优先级的 MouseEvents(UP 和/或 DOWN)的网格中,停止传播,并重新调度具有与原始 event.target 相同属性的新 MouseEvent,但这次使用 ctrlKey=真的。
我不确定它是否会导致其他 10,000 件东西损坏。
【讨论】:
【参考方案2】:我尝试了 Nalandial 的想法,但没有运气......无法真正拦截这些事件,但它让我朝着正确的方向前进。在这方面做了很多工作,然后发现解决方案比我做的要简单得多。我只需要扩展 dataGrid 类并覆盖两个函数(mouseDownHandler 和 mouseClickHandler),在那里添加 ctrlKey = true
然后调用函数的其余部分就可以完美地工作。如果你想实现它,下面是代码:
package com
import flash.events.MouseEvent;
import mx.controls.DataGrid;
public class ForceCtrlDataGrid extends DataGrid
public function ForceCtrlDataGrid()
super();
override protected function mouseClickHandler(event:MouseEvent):void
event.ctrlKey = true;
super.mouseClickHandler(event);
override protected function mouseDownHandler(event:MouseEvent):void
event.ctrlKey = true;
super.mouseDownHandler(event);
【讨论】:
【参考方案3】:您也可以像这样扩展 DataGrid 并覆盖 selectItem 方法:
override protected function selectItem(item:IListItemRenderer, shiftKey:Boolean, ctrlKey:Boolean, transition:Boolean = true):Boolean
return super.selectItem(item, shiftKey, true, transition )
代码更少,对可能正在侦听该 MouseEvent 的其他元素产生影响的可能性更小。
【讨论】:
以上是关于如何让数据网格表现得像 ctrl 键处于活动状态?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 中获取箭头键并在键盘上输入键以表现得像 Windows 7
ExtJS 3 DataGrid:如何使标题菜单中的最后一个检查项处于非活动状态
如何让我的应用程序表现得像我正在使用 Swift 在运行时更改 Application is agent(UIElement)?