Flex:MXDataGridItemRenderer中spark.components.TextArea的换行问题

时间:2011-01-08 15:05:52

标签: actionscript-3 flex textarea line-breaks

我有DataGrid MXDataGridItemRenderer作为itemEditor应用于其中一列。编辑器包含spark.components.TextArea控件。

默认情况下,当按下[enter]键时,datagrid的任何文本项编辑器都会自行关闭。 牢记这一点;我想做的是:

  1. 阻止编辑关闭[SHIFT + ENTER]键但接受换行符(我可以这样做,请参阅下面的代码)
  2. 关闭[ENTER]键上的编辑器,但不接受换行符(无法实现此目的)
  3. 以下是MXDataGridItemRenderer中的当前代码:

    <s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                          xmlns:s="library://ns.adobe.com/flex/spark" 
                          xmlns:mx="library://ns.adobe.com/flex/mx" 
                          focusEnabled="true" 
                          >
    <fx:Script>
        <![CDATA[
            protected function onTxtDataKeyDown(event:KeyboardEvent):void
            {
                if (event.keyCode == 13)
                {
                    if (event.shiftKey)
                    {
                        //Prevent editor from closing on [SHIFT+ENTER] key but accept the linebreak
                        event.stopImmediatePropagation(); // » works
                    }
                    else
                    {
                        //Close the editor on [ENTER] key but do not accept the linebreak
                        event.preventDefault(); // » does not work
                    }
                }
            }
    
        ]]>
    </fx:Script>
    
    <s:TextArea id="txtData" paddingTop="3" lineBreak="explicit"
                text="{dataGridListData.label}" 
                verticalScrollPolicy="auto" horizontalScrollPolicy="off" 
                keyDown="onTxtDataKeyDown(event)" 
                />
    

    我也尝试了textInput事件,但这并没有成功。 那么:如何在 [回车]键关闭编辑器时阻止换行

    感谢任何帮助。感谢。

    编辑:如果我将spark.components.TextArea更改为mx.controls.TextArea,则event.preventDefault()的第二部分将按预期工作,但接着是SHIFT + ENTER接受的第一部分换行不起作用。

2 个答案:

答案 0 :(得分:1)

根据API参考keyDown只能在AIR中取消,而不能在Flash Player中取消。你正在开发哪一个?我无法在AIR中取消keyDowntextinput。可能是一个错误。为什么不用Adobe记录缺陷并看看他们说什么?

更新:我已确认这确实是spark.components.TextArea中的错误。线程http://forums.adobe.com/thread/703195讨论了类似的问题。针对Flex也记录了一个错误 - http://bugs.adobe.com/jira/browse/SDK-25542

解决方法是使用mx.controls.TextArea

答案 1 :(得分:0)

我英语不好。请参阅代码。

<!--snip-->
<fx:Script>
    <![CDATA[

        protected function textArea_creationCompleteHandler(event:FlexEvent):void{
            textArea.addEventListener(TextOperationEvent.CHANGING,onChangingHandler);
        }

        //This event is faster than KEY_DOWN.
        private function onChangingHandler(event:TextOperationEvent):void {
            if(event.operation is SplitParagraphOperation){
                //SplitParagraphOperation only cancel.
                event.preventDefault();
            }
        }

    ]]>
</fx:Script>
  <s:TextArea id="textArea"
                    width="100"
                    creationComplete="textArea_creationCompleteHandler(event)"
                    height="60"
                    />
  <!--snip-->