我有DataGrid
MXDataGridItemRenderer
作为itemEditor
应用于其中一列。编辑器包含spark.components.TextArea
控件。
默认情况下,当按下[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
事件,但这并没有成功。
那么:如何在 [回车]键关闭编辑器时阻止换行?
感谢任何帮助。感谢。
编辑:如果我将spark.components.TextArea更改为mx.controls.TextArea,则event.preventDefault()
的第二部分将按预期工作,但接着是SHIFT + ENTER接受的第一部分换行不起作用。
答案 0 :(得分:1)
根据API参考keyDown
只能在AIR中取消,而不能在Flash Player中取消。你正在开发哪一个?我无法在AIR中取消keyDown
或textinput
。可能是一个错误。为什么不用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-->