如何使用Flex计算TextArea中相对于光标位置的行号?

时间:2009-06-11 12:15:07

标签: flex textarea

大家好,  如何在鼠标点击,按键和键盘等事件中找到行号。  并且还要突出显示该颜色的线条。  我使用了TextArea。

先谢谢。

此致 shivang

1 个答案:

答案 0 :(得分:3)

您需要的功能包含在TextField课程中。您应该使用getLineIndexAtPoint TextField方法将该行置于特定位置。

但TextArea隐藏了用户的内部TextField类。

因此,选项一是使用UITextField。 方案二是扩展TextArea并在那里实现所需的功能。

这是一个可以帮助您入门的快速原型:

package test
{
import mx.controls.TextArea;
import flash.events.MouseEvent;
import flash.text.TextFormat;

public class HighlightTextArea extends TextArea
{
    public function HighlightTextArea()
    {
        super();
    }

    override protected function createChildren ():void
    {
        super.createChildren();
        textField.addEventListener(MouseEvent.CLICK, textField_clickHandler);
    }

    private function textField_clickHandler (event:MouseEvent):void
    {
        var lineIndex:int = textField.getLineIndexAtPoint(event.localX, event.localY);
        if (lineIndex == -1)
            return;
        var lineOffset:int = textField.getLineOffset(lineIndex);
        var lineLength:int = textField.getLineLength(lineIndex);
        if (lineLength > 0)
            textField.setTextFormat(new TextFormat(null, null, 0xFF0000), lineOffset, lineOffset+lineLength);
    }
}
}