添加新行时,如何以编程方式滚动到Flex Spark Textarea的末尾?

时间:2011-09-06 15:25:31

标签: flex textarea

mx的旧方法:TextArea不再有效。具体做法是:

myMxTextArea.verticalScrollPosition = myMxTextArea.maxVerticalScrollPosition;

我已经为Spark发现了这种方法,但看起来有点笨拙:

mySparkTA.scrollToRange(mySparkTA.text.length-1, mySparkTA.text.length);

有更简单的方法吗?

4 个答案:

答案 0 :(得分:6)

假设你有

<s:TextArea id="ta" width="100%" height="100%" />

以下内容可行:

ta.scroller.verticalScrollBar.value = ta.scroller.verticalScrollBar.maximum;

无需将TextArea包装在Scroller组件中。

答案 1 :(得分:3)

这就是你如何使用spark textarea,但是你总是可以尝试将它包装在一个Scroller组件中,而不是让textarea本身打扰滚动:

<s:Scroller id="scroller">
   <s:TextArea id="ta" width="100%" height="100%" />
</s:Scroller>

然后在AS中执行此操作:

scroller.verticalScrollBar.value = scroller.verticalScrollBar.maximum;

没有其他 easy 方法可以做到。

答案 2 :(得分:2)

spark TextArea有一个&#34; appendText&#34;方法 这会将文本和卷轴自动附加到添加的行中。

答案 3 :(得分:0)

<s:TextArea id="consoleTextArea" 
            change="consoleTextArea_changeHandler(event)"
            valueCommit="consoleTextArea_valueCommitHandler(event)"
            updateComplete="scrollToTheBottom()"
            />

然后在ActionScript中:

        protected function consoleTextArea_valueCommitHandler(event:FlexEvent):void {
            scrollToTheBottom();
        }

        protected function consoleTextArea_changeHandler(event:TextOperationEvent):void {
            scrollToTheBottom()
        }

        public function scrollToTheBottom():void {
            var scrollBar:VScrollBar = consoleTextArea.scroller.verticalScrollBar;
            scrollBar.value = scrollBar.maximum;
            consoleTextArea.validateNow();

            if (scrollBar.value != scrollBar.maximum) {
                scrollBar.value = scrollBar.maximum;
                consoleTextArea.validateNow();
            }
        }

您可能需要将if语句放在循环中几次迭代,或者直到值匹配或接近最大值。

更新:为updateComplete事件添加了侦听器。这可能会妨碍某人打字,但可能会对此用例有效。