1

現在、テキストボックス内で Ctrl-C を押してコンテンツをコピーするたびに、テキストボックスが Event.CHANGE を受け取るようです。そのため、アプリケーションはテキスト ボックスに変更が加えられたと判断し、[変更を適用] ボタンを有効にします。 、変更は加えられていませんが、ユーザーが望んでいたのはテキストボックスの内容をコピーすることだけでした。使用しているテキスト ボックス コンポーネントは spark.components.TextInput です

ビューの初期化時に登録します:

_view.hostNameTextBox.addEventListener(
    Event.CHANGE, onConnectionDat‌aChanged, false, 0, true
);

イベントリスナー関数は次のとおりです。

private function onConnectionDataChanged(e:Event):void {
    _view.applyButton.enabled = true;
}

何か案は ?

ありがとう !

4

3 に答える 3

4

@Sunil D.の答えのわずかなバリエーションを次に示します。operationイベントのプロパティを使用して、現在の操作がコピー操作であるか別の操作であるかを判別します。

private function inputChangeHandler(event:TextOperationEvent):void {
    var operation:IOperation = event.operation;
    if (operation is CopyOperation) trace("Ctrl+C was pressed");
    if (operation is InsertTextOperation) trace("New text was inserted");
    if (operation is DeleteTextOperation) trace("Some text was deleted");
}

このアプローチでは、複数のTextInputsに関する問題も修正されます。必要なイベントハンドラーは、多数ではなく1つだけです。

于 2012-08-13T09:22:53.343 に答える
1

Sparkは、キーストロークごとにTextOperationEvent.CHANGETextInputイベントを送出します。

ただし、 Flextras が参照しているKeyboardEventとは異なり、このイベントはどのキーが押されたかを通知しません。代わりに、イベントには、変更を説明するFlowOperationである操作プロパティがあります。

しかし、気にしないでください。change イベントはキーストロークごとにディスパッチされるため、TextInputの値を前の change イベントの値と比較します。

private var lastTextInputValue:String = "";

private function inputChangeHandler(event:Event):void
{
    if (textInput.text == lastTextInputValue)
    {

    }
    else
    {

    }
    lastTextInputValue = textInput.text;
}
于 2012-08-13T04:26:49.180 に答える
0

次のようなことを試すことができます:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[
            import spark.events.TextOperationEvent;

            protected function inPutText_changeHandler(event:TextOperationEvent):void
            {
                // TODO Auto-generated method stub
                if(ctrlCPressed)
                {
                    clickBtn.enabled = false;
                    ctrlCPressed = false;
                }
                else
                {
                    clickBtn.enabled = true;
                }
            }

            private var ctrlCPressed:Boolean = false;
            protected function inPutText_keyDownHandler(event:KeyboardEvent):void
            {
                // TODO Auto-generated method stub
                if(event.ctrlKey == true && event.keyCode == Keyboard.C)
                    ctrlCPressed = true;
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
    <s:TextInput id="inPutText" change="inPutText_changeHandler(event)" text="Mahesh Parate"
                 keyDown="inPutText_keyDownHandler(event)"/>
    <s:Button id="clickBtn" label="Click" enabled="false"/>
</s:Application>

TextInput コンポーネントには、TextInput.CHANGE イベント用と KeyboardEvent.KEY_DOWN 用の 2 つのリスナーが含まれています。keyDown リスナーは、CTRL+C かどうかを検出し、フラグを設定します。CHANGE イベントが処理されると、そのリスナーは CTRL+C のフラグが true かどうかをチェックし、適切なアクションを実行します。CTRL+C が押された場合、コードはボタンを有効にします。そうでない場合、ボタンは無効になり、フラグは false にリセットされます。

于 2012-08-13T05:44:11.697 に答える