Flex 4: комбинация ползунка и текстового поля

В гибком проекте у меня есть ползунок и текстовое поле в форме, с помощью которых я ищу пользовательский ввод, используя либо ползунок (для простоты), либо ввод текста (для точных чисел). Основываясь на пользовательском вводе любого из них, я обновляю другой через подключенный прослушиватель, который вызывает соответствующие функции.

slider.addEventListener("change",sliderUpdate);
textIn.addEventListener("change",valueUpdate);

У меня проблемы с текстовым вводом, он не позволяет мне вводить десятичное число - это, вероятно, происходит, поскольку у меня есть слушатель, который увеличивает ползунок для каждого нажатия клавиши в текстовом вводе и, следовательно, не может принять ". ". например .05, .1, .00003

Как мне обойти это - могу ли я удерживать прослушиватель ввода текста в режиме ожидания, пока я не нажму клавишу ввода, чтобы указать, что я закончил?


person RG1967    schedule 02.07.2011    source источник


Ответы (1)


Это работает для меня:

    <?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 sliderUpdate(event:Event):void
            {
                textIn.text=slider.value.toString();
            }

            protected function valueUpdate(event:TextOperationEvent):void
            {
                slider.value=Number(textIn.text);
            }
        ]]>
        </fx:Script>
        <s:HSlider id="slider" x="10" y="106" width="308" change="sliderUpdate(event)" maximum="100.0" minimum="0.0" stepSize="0.01"/>
        <s:TextInput id="textIn" x="10" y="76" width="87" change="valueUpdate(event)" text="0"/>
    </s:Application>

Шаг ползунка равен 0,01; Если вы введете значение в текстовое поле, ползунок должен автоматически обновиться.

ИЗМЕНИТЬ:

Затем в TextInput вы должны прослушать событие keyDown (KeyboardEvent.KEY_DOWN), и функция должна проверить, является ли нажатая клавиша ENTER, а затем обновить ползунок:

<s:TextInput id="textIn" x="10" y="76" width="87" keyDown="textIn_keyDownHandler(event)" text="0"/>

Функция:

    protected function textIn_keyDownHandler(event:KeyboardEvent):void
    {
        if (event.keyCode == Keyboard.ENTER)
        {
            slider.value=Number(textIn.text);
        }
    }

Если вы предпочитаете использовать addEventListener, это должно сделать это:

textIn.addEventListener(KeyboardEvent.KEY_DOWN, textIn_keyDownHandler);
person Chris Ghenea    schedule 03.07.2011
comment
Я разъяснил вопрос о том, что я имел в виду под десятичными знаками. По деловым причинам мне нужно, чтобы ползунок имел другое значение привязки, которое идет с более высокими приращениями. Мой вызов не для 6.01, 2.005 и т. д. Работа для меня - вызов с .009, ,045 и т. д. - он не позволяет '.' так как ползунок пытается обновляться при каждом нажатии клавиши - person RG1967; 03.07.2011
comment
Спасибо за решение, но почему использование двух больших пальцев не работает, даже если я обновляю массив значений? - person kaissun; 18.10.2013