2013-08-13 39 views
5

Làm thế nào để autoscroll để dưới cùng của TextField trong ActionScript trong khi thêm văn bản có lập trình:AS3 TextField autoscroll xuống đáy

var _output:TextField = new TextField(); 
for (var i:int = 0; i < 100; ++i) { 
    _output.appendText("Hello World!"); 
} 

Cũng xem xét rằng di chuyển dọc của TextField nên được kích hoạt, và một lần mới văn bản đã được thêm vào sau đó autoscroll đến phía dưới nên được thực hiện một lần nữa.

+1

Lưu ý rằng bạn đang chỉ định "Hello World!" thành '_output.text' một trăm lần liên tiếp. Thay vào đó, bạn nên gọi 'appendText()'. – Vesper

+0

Bạn nói đúng, cảm ơn! – Narek

Trả lời

7

Bạn nên nghe sự kiện Event.CHANGE trên TextField được đề cập. Event description relative to textField Và nếu bạn chụp sự kiện này, bạn sẽ chơi với thuộc tính scrollV. Nói, như thế này:

_output.addEventListener(Event.CHANGE,scrollAllDown); 
function scrollAllDown(e:Event):void { 
    var tf:TextField=(e.target as TextField); 
    if (!tf) return; 
    tf.scrollV=tf.maxScrollV; 
} 

Cập nhật: Catching Event.CHANGE không làm việc, tôi rời khỏi đây trong trường hợp ai đó tình cờ trên phương pháp này và quá phát hiện ra nó không hoạt động. Vì vậy, cách duy nhất là để phân lớp các TextField và tự ghi đè appendText() phương pháp để bao gồm di chuyển, như thế này:

public class OutputTF extends TextField 
{ 
    // constructor omitted 
    override public function appendText(text:String):void 
    { super.appendText(text); this.scrollV=this.maxScrollV; } 
} 
+0

Tại sao bạn nhận được 'e.target như TextField'? Thay vào đó bạn không thể sử dụng '_output' xem xét thực sự nó là một thành viên tĩnh của một lớp? – Narek

+1

Vâng, giả sử bạn cần thêm một textField đơn để autoscroll - sau đó bạn sẽ có hai dòng 'addEventListener (Event.CHANGE, scrollAllDown)' cho hai TextField khác nhau và để xác định * mà * TextField đã gửi sự kiện, bạn sẽ cần xử lý 'e.target'. – Vesper

+0

Điều này không hoạt động: 'appendText' không gửi' Event.CHANGE' khi văn bản được thay đổi ** lập trình **. – Narek

3

Bạn có thể sử dụng các thuộc tính scrollV và maxScrollV của TextField:

var _output:TextField = new TextField(); 
for (var i:int = 0; i < 100; ++i) { 
    _output.appendText("Hello World!"); 
    //set vertical scroll position to max value 
    _output.scrollV = _output.maxScrollV; 
} 
Các vấn đề liên quan