Actionscript 3 Flex:MXDataGridItemRenderer内spark.components.TextArea的换行问题
我有一个Actionscript 3 Flex:MXDataGridItemRenderer内spark.components.TextArea的换行问题,actionscript-3,apache-flex,textarea,line-breaks,Actionscript 3,Apache Flex,Textarea,Line Breaks,我有一个DataGrid,它有一个mxdatagriditemrender作为itemdeditor应用于其中一列。编辑器包括一个spark.components.textare控件 默认情况下,按下[enter]键时,datagrid的任何文本项编辑器都会自动关闭。。 记住这一点;我想做的是: 防止编辑器在[SHIFT+ENTER]键关闭,但接受换行符(我可以这样做,请参见下面的代码) 按[ENTER]键关闭编辑器,但不接受换行符(无法实现此功能) 以下是MXDataGridItemRende
DataGrid
,它有一个mxdatagriditemrender
作为itemdeditor
应用于其中一列。编辑器包括一个spark.components.textare
控件
默认情况下,按下[enter]键时,datagrid的任何文本项编辑器都会自动关闭。。
记住这一点;我想做的是:
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
事件,但没有成功。
因此:当编辑器在[enter]键上关闭时,我如何防止换行符
感谢您的帮助。谢谢
编辑:如果我将spark.components.TextArea更改为mx.controls.TextArea,则使用
event.preventDefault()的第二部分
将按预期工作,但SHIFT+ENTER接受换行符的第一个部分将不工作。根据API参考,按键功能只能在空中取消,不能在Flash Player中取消。你为哪一个开发?我无法取消空中的keyDown
或textinput
。可能是个虫子。为什么不用Adobe记录一个缺陷,看看他们怎么说
更新:我已经确认这确实是spark.components.textare
中的一个bug。该线程讨论了类似的问题。Flex也记录了一个bug-
解决方法是使用
mx.controls.TextArea
我的英语不好。请看代码
<!--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-->
正如我在帖子中所说;我以前试过。这不适用于spark.components.TextArea。按enter键时,textinput不会跟踪任何内容。仅当它是常规字符键(如a、b、c..space等)时才进行跟踪。也不能执行此操作。如果在文本区域中选择了文本,该怎么办?按回车键会把它全部删除,只去掉换行符并不能解决问题。我正在为AIR开发。是的,似乎是一个bug。如果您仍然感兴趣,我已经确认您的问题是一个缺陷,flex团队已经意识到了这一点。更新答案,并提供相关讨论的链接。