Es scheint unmöglich zu sein, das Tastaturereignis zu erfassen, das normalerweise zum Kopieren verwendet wird, wenn eine Flex-Anwendung im Browser oder als AIR-Anwendung ausgeführt wird, vermutlich weil der Browser oder das Betriebssystem es zuerst abfängt.
Gibt es eine Möglichkeit, den Browser oder das Betriebssystem anzuweisen, das Ereignis durchzulassen?
In einem AdvancedDataGrid habe ich zum Beispiel das keyUp-Ereignis auf handleCaseListKeyUp(event) gesetzt, das die folgende Funktion aufruft:
private function handleCaseListKeyUp(event:KeyboardEvent):void
{
var char:String = String.fromCharCode(event.charCode).toUpperCase();
if (event.ctrlKey && char == "C")
{
trace("Ctrl-C");
copyCasesToClipboard();
return;
}
if (!event.ctrlKey && char == "C")
{
trace("C");
copyCasesToClipboard();
return;
}
// Didn't match event to capture, just drop out.
trace("charCode: " + event.charCode);
trace("char: " + char);
trace("keyCode: " + event.keyCode);
trace("ctrlKey: " + event.ctrlKey);
trace("altKey: " + event.altKey);
trace("shiftKey: " + event.shiftKey);
}
Bei der Ausführung kann ich nie die Freigabe der Taste "C" erhalten, während ich gleichzeitig die Befehlstaste drücke (die als KeyboardEvent.ctrlKey angezeigt wird). Ich erhalte die folgenden Trace-Ergebnisse:
charCode: 0
char:
keyCode: 17
ctrlKey: false
altKey: false
shiftKey: false
Wie Sie sehen können, ist das einzige Ereignis, das ich erfassen kann, das Loslassen der Befehlstaste, das Loslassen der Taste "C", während die Befehlstaste gehalten wird, wird nicht einmal gesendet.
Hat jemand erfolgreich die Standard-Tastaturbedienung für Kopieren und Einfügen implementiert?
Soll ich einfach nur die Taste "C" verwenden (wie im Codebeispiel gezeigt) oder eine Kopierschaltfläche zur Verfügung stellen?
Oder muss ich den Listener manuell auf einer höheren Ebene erstellen und das Ereignis in die Eingeweide meiner modularen Anwendung weiterleiten?