2009-09-20 54 views
1

我以編程方式填充文本字段,並在添加新文本時滾動到maxScrollH,以便用戶可以看到文本的進度。這工作正常,直到我單擊TextField,它將scrollH設置回0並將插入符號放置在文本中的等效位置。Actionscript 3 TextField scrollH屬性在點擊時設置爲0

textField.setSelection(text.length, text.length); //sets the caretIndex/selection to the end 
textField.scrollH = textField.maxScrollH; //scrolls to max 

這是我用來在更新textField文本屬性時滾動的代碼。我試着在textField上的click事件中添加一個監聽器,它以某種方式工作,但會導致可見的跳轉。

override protected function createChildren() : void 
{ 
    super.createChildren(); 
    textField.addEventListener(MouseEvent.CLICK, handleTextFieldClick, false, 0, true); 
} 

protected function handleTextFieldClick(event:MouseEvent):void 
{ 
    textField.scrollH = currentTextFieldScrollPosition; //stored scrollH value 
    trace(textField.scrollH); 
} 

我的猜測是有一個滾動位置被計算或存儲在某個我找不到的地方。

回答

1

柔性的TextInput設置文本框的選擇:

/** 
* @private 
* Gets called by internal field so we draw a focus rect around us. 
*/ 
override protected function focusInHandler(event:FocusEvent):void 
{ 
    if (event.target == this) 
     systemManager.stage.focus = TextField(textField); 

    var fm:IFocusManager = focusManager; 

    if (editable && fm) 
    { 
     fm.showFocusIndicator = true; 
     if (textField.selectable && 
      _selectionBeginIndex == _selectionEndIndex) 
     { 
      textField.setSelection(0, textField.length); 
     } 
    } 

    [...] 

在我的組件修復覆蓋這個這個問題:

override protected function focusInHandler(event:FocusEvent):void 
    { 
     super.focusInHandler(event); 
     textField.scrollH = currentTextFieldScrollPosition; 
    } 
+0

我有相同的AS3問題(在TextArea中的UIScrollbar在重點獲取textarea然後丟失時重置其位置),但focusInHandler似乎永遠不會被我調用來覆蓋它。我也沒有得到第一個代碼塊 - 這是focusInHandler通常做的事情嗎?你試圖做什麼不同呢?混淆了我 - 如果它不是focusinhandler的默認代碼,爲什麼要截斷它?我對AS3比較陌生。 – Amalgovinus 2010-10-18 19:52:54

相關問題