我正在为我的Flex项目使用ToggleButtonBar控件。当用户使用键盘关注此控件时,它允许他使用箭头键,页面向上/向下或Home / end键切换选项卡。但是,我想添加 Ctrl Tab 作为切换标签的方法。 所以,我重写方法keyDownHandler来使用它。
override protected function keyDownHandler(event:KeyboardEvent):void
{
var updateFocusIndex:Boolean = true;
switch (event.keyCode)
{
case Keyboard.TAB:
{
if(event.ctrlKey)
{
focusManager.showFocusIndicator = true;
drawButtonFocus(focusedIndex, false);
if (event.shiftKey)
{
focusedIndex = prevIndex(focusedIndex);
}
else
{
focusedIndex = nextIndex(focusedIndex);
}
if (focusedIndex != -1)
{
drawButtonFocus(focusedIndex, true);
selectButton(focusedIndex, updateFocusIndex, event);
}
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
}
break;
}
default:
{
super.keyDownHandler(event);
}
}
}
现在当用户按 Ctrl Tab 时,我的处理程序被执行,但也会执行标准的Tab事件,这会改变焦点。而且我不希望这种情况发生。我希望 Ctrl Tab 只更改标签而不会失去焦点。
答案 0 :(得分:0)
我在这里发现了一个奇怪的解决方案:http://coder.sonicpoets.com/?p=8
似乎可以从KeyDownHandler调用FocusEvent,然后在event.preventDefault的焦点事件处理程序中阻止移动到另一个组件。
所以而不是
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
我用过
isCtrlTab = true;
this.setFocus();
并添加了
this.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, focusChange);
protected function focusChange(event:FocusEvent):void
{
if (isCtrlTab)
{
isCtrlTab = false;
event.preventDefault();
}
}