2011-10-26 43 views
0

这里是一个功能例如:警报防止事件的内容与实际改变焦点

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
      public function go():void{    
       Alert.show("The focus will return to txtOne. Look: "); 
      } 
     ]]> 
    </mx:Script> 
    <mx:VBox> 
     <mx:TextInput id="txtOne" text="1" focusOut="go()"/> 
     <mx:TextInput id="txtTwo" text="2"/>  
    </mx:VBox> 
</mx:Application> 

当您更改txtOne到txtTwo,该警报显示,然后按确定后,焦点将返回到txtOne。我不希望这种情况发生。如何解决这个问题?

回答

0

Alert.show有关闭回调参数,所以你会知道,当它关闭并将焦点设置到别的东西。 更新:你应该有标志,说明,侧重了可以处理事件:

private var needAlert:Boolean = true; 

public function go():void 
{ 
    if (needAlert) 
    { 
     Alert.show("The focus will return to txtOne. Look: ", 
      "", 0, null, myCloseHandler); 
     needAlert = false; 
    } 
} 

private function myCloseHandler(event:CloseEvent):void 
{ 
    this.setFocus(); 
    needAlert = true; 
} 
+0

有趣的是,这会导致无限循环。当按下OK时,焦点会变回txtOne,所以称为我的closeHandler函数。当我使用该功能改变焦点时,焦点输出会再次被调用,在那里你可以看到它的进展情况。 –

+0

检查更新的答案 – moropus

0

尝试,这也保证了重点飞到哪里,用户希望它太

<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:mx="library://ns.adobe.com/flex/mx"> 
<fx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 
     import mx.events.CloseEvent; 
     import mx.managers.IFocusManagerComponent; 
     private var ignoreFocusChange:Boolean = false; 

     private var focusTargetOnReturn: IFocusManagerComponent; 

     public function go():void 
     { 

      if(!ignoreFocusChange){ 
       focusTargetOnReturn = focusManager.getFocus(); 

       Alert.show("The focus will not return to txtOne anymore. Look: ", 
        "", 0, null, myCloseHandler); 
      } 
     } 

     private function myCloseHandler(event:CloseEvent):void 
     {    
      ignoreFocusChange = true; 
      focusManager.setFocus(focusTargetOnReturn); 
      ignoreFocusChange = false; 
     } 
    ]]> 
</fx:Script> 
<mx:VBox> 
    <mx:TextInput id="txtOne" text="1" focusOut="go()"/> 
    <mx:TextInput id="txtTwo" text="2"/>  
</mx:VBox>