Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
Apache flex MouseEvent shiftKey或ctrlKey始终为false_Apache Flex_Events - Fatal编程技术网

Apache flex MouseEvent shiftKey或ctrlKey始终为false

Apache flex MouseEvent shiftKey或ctrlKey始终为false,apache-flex,events,Apache Flex,Events,我只是在我的对话框中添加一个Flex-HSlider。它允许设置以天为单位的持续时间,我认为如果用户在拖动滑块的同时按下SHIFT键可以快速切换到周,那将是一件非常棒的事情 不幸的是,传递给事件处理程序的事件不包含键修饰符信息 这是我的密码: protected function onDurationSliderChange (event:SliderEvent) : void { var durationInDays : int = this.sld_durationInDays.va

我只是在我的对话框中添加一个Flex-HSlider。它允许设置以天为单位的持续时间,我认为如果用户在拖动滑块的同时按下SHIFT键可以快速切换到周,那将是一件非常棒的事情

不幸的是,传递给事件处理程序的事件不包含键修饰符信息

这是我的密码:

protected function onDurationSliderChange (event:SliderEvent) : void
{
    var durationInDays : int = this.sld_durationInDays.value;

    // modifiers
    if (event.triggerEvent is MouseEvent) {
        var mouseEvt : MouseEvent = event.triggerEvent as MouseEvent;
        trace (mouseEvt.ctrlKey + "  " + mouseEvt.ctrlKey + "  " + event.keyCode);
        trace (mouseEvt);

        // when using SHIFT, snap to week
        if (mouseEvt.shiftKey && !mouseEvt.ctrlKey)
            durationInDays = int(durationInDays/7) * 7;
    }
    this.durationInDays = durationInDays;
}
将生成以下输出:

false  false  -1
[MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=NaN localY=NaN stageX=NaN stageY=NaN relatedObject=null ctrlKey=false altKey=false shiftKey=false buttonDown=false delta=0]
有人知道如何找出拖动时是否按下了SHIFT(或CTRL)键吗?谢谢

我的主张:

在应用程序中添加此变量:

private var shiftPressed:Boolena = false;
在应用程序的creationComplete处理程序中添加此行

this.stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyHandler);
this.stage.addEventListener(KeyboardEvent.KEY_UP, unCheckKeyHandler);
接下来添加此函数

private function checkKeyHandler(event:KeyboardEvent):void {
    if (event.shiftKey)
        shiftPressed = true;
}

private function unCheckKeyHandler(event:KeyboardEvent):void {
    shiftPressed = false;
}
并修改您的函数

protected function onDurationSliderChange (event:SliderEvent) : void
{
    if(shiftPressed) {
        //add your operations
    } else {
        //add your operations
    }
}

我找到了这个解决方案:

如前所述设置shiftPressed变量:

private var shiftPressed:Boolean = false;
然后使用
s:slider
组件上的预定义侦听器:

mouseDown="{shiftPressed = event.shiftKey}"
mouseUp="{shiftPressed = false}"
然后,您可以使用
s:slider
snapInterval
属性,或者将逻辑实现到
change
处理程序中,在我的情况下,如果按下shift键,我只需按45步,否则按0.01步,因此我使用:

snapInterval="{(shiftPressed)?45:0.01}"

是的,谢谢,很有效!两件事:1)我无法将事件监听器添加到'this.stage',因为它是空的,但添加到'this'可以工作2)在应用程序启动后,我必须单击一个组件以将焦点放在Flex应用程序上,否则我将无法获得任何键盘事件。仅仅点击Flex应用程序中的任意位置并没有起到作用。我在列表和itemClickEvent中遇到了类似的问题,其中也不包含关键修改器信息。Arkadiusz Kondas的解决方案起了作用。