2009-03-27 6 views
1

Ich arbeite an einem AS3 Flash-Spiel, das zunächst eine Eingabe von einem Barcode-Scanner nimmt. Die Daten, die gescannt werden, werden als eine lange Zeichenfolge mit Tabs verwendet, um die Datensegmente zu trennen. Der Scanner fungiert als Tastatur und gibt die Zeichenkette in ein verstecktes Textfeld ein, so dass ich die Zeichenkette greifen und sie auseinander teilen kann, um die Daten zu erhalten.Wie kann ich Tabulatorzeichen in einem Textfeld in Flash zulassen?

Der Eingang und alles funktioniert super. Das Problem, auf das ich stoße, ist, dass, wenn das Textfeld ein Tab-Zeichen erhält, anstatt das Zeichen in das Textfeld einzufügen, das, was sich im Textfeld befindet, hervorhebt. Dann überschreibt der nächste Satz von Zeichen, was bereits im Textfeld war.

Gibt es einen Weg um dies zu umgehen? Gibt es eine Möglichkeit, dass das Textfeld die Registerkarte als Literal akzeptiert? Ich kann die Art, in der der Barcode die Daten in der Zeichenfolge begrenzt, nicht ändern.

Danke für jede Hilfe, die Sie geben können.

Antwort

1

(aktualisiert Lösung)

Das in der Tat preventabe ist. Sie können es mit folgendem Text anhalten (unter der Annahme, dass Text das Textfeld ist).

Text.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, TextKeyFocusChange); 

private function TextKeyFocusChange(e:FocusEvent):void 
{ 
    e.preventDefault(); 

    var txt:TextField = TextField(e.currentTarget); 

    txt.appendText("\t"); 
    txt.setSelection(txt.length, txt.length); 
} 
+0

Das funktioniert fast. Ich kann das Zeichen "\ t" nicht hinzufügen, aber ich kann die eindeutige Zeichenfolge "? $" Eingeben. Das Problem ist jetzt, dass wenn ich .appendText() der Cursor vor dem hinzugefügten Text bleibt. Das Ergebnis ist die Datenfolge gefolgt von einer Reihe von $. – user54331

+0

Ich habe meine Lösung aktualisiert. Ich habe kein Problem damit, es fügt ein Tab-Char ein. –

+1

Wenn der Benutzer einen Teil des Textes ausgewählt hat, wird er nicht überschrieben. –

4

Nachfolgend kann der Benutzer eine Registerkarte überall in der TextField- Typ

someTextField.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, TextKeyFocusChange); 
private function TextKeyFocusChange(e:FocusEvent):void 
{ 
    e.preventDefault();   
    var txt:TextField = TextField(e.currentTarget); 
    txt.replaceText(txt.caretIndex, txt.caretIndex, "\t"); 
    txt.setSelection(txt.caretIndex + 1, txt.caretIndex + 1); 
} 

Hinweis (nicht nur das Ende.): Diese Lösung ein wenig langsamer als die Verwendung von appendText ist und sollte nur verwendet werden, wenn Tabs können an beliebiger Stelle im TextField eingegeben werden, nicht nur am Ende.

Verwandte Themen