• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-08-2010, 15:13   #1 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Focus auf ein Element nach umschalten des "selectedIndex" eines TabNavigators

Ich möchte mit det Tab-Taste über alle Elemente eines TabNavigators "iterieren". Sobald die letzte Komponente eines Tabs den Fokus verliert möchte ich den nächsten Tab anspringen und den Fokus auf die erste Komponente setzen um dort weiter zu taben.

Selbst wenn ich es mit einem Timeout schaffe den Fokus auf das erste Element zu setzen, funktioniert das Verhalten nicht mehr richtig.

Wie kann ich das verhalten modifizieren um ganz normal durch alle Elemente zu taben?

Hier ein kleines Beispiel zu dem Sachverhalt. Einfach den Fokus in das erste Textfeld setzen und dann per Tab durchschalten. Nach dem Umschalten des Tabnavigators soll der Fokus im neuen Tab stehen und dort ganz normal weiter getabt werden.

PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                minWidth="955" 
                minHeight="600" 
                layout="vertical">
    
    
    <mx:Script>
        <![CDATA[
            import flash.utils.setTimeout;
            
            import mx.core.UIComponent;

            private function tabNavigator_keyDownHandler(event:KeyboardEvent):void
            {
                if(event.keyCode == Keyboard.TAB)
                {
                    var lastTabChild:UIComponent = tabNavigator.selectedChild.getChildAt(tabNavigator.selectedChild.numChildren - 1) as UIComponent;
                    if(tabNavigator.focusManager.getFocus() == lastTabChild)
                    {
                        if(tabNavigator.selectedIndex < tabNavigator.numChildren - 1)
                        {
                            tabNavigator.selectedIndex++;
                            
                            var firstChildTab:UIComponent = tabNavigator.selectedChild.getChildAt(0) as UIComponent;
                            
                            // apply focus
                            //setTimeout(firstChildTab.setFocus, 100);
                        }
                    }
                }
            }

        ]]>
    </mx:Script>
    
    <mx:TextInput text="first"/>
    
    
    <!-- tab navigator -->
    <mx:TabNavigator id="tabNavigator" 
                     tabChildren="true"
                     tabEnabled="false"
                     width="250"
                     height="120"
                     creationPolicy="all"
                     keyDown="tabNavigator_keyDownHandler(event)">
        
        <!-- tab A -->
        <mx:VBox id="containerA" label="TabA" horizontalAlign="center" >
            <mx:TextInput />
            <mx:TextInput />
        </mx:VBox>
        
        <!-- tab B -->
        <mx:VBox id="containerB" label="TabB" horizontalAlign="center">
            <mx:TextInput />
            <mx:TextInput />
            
        </mx:VBox>
        
    </mx:TabNavigator>
    
    
    <mx:TextInput text="last" />
    
</mx:Application>
__________________
ERROR: Signature is too large

Geändert von rendner[i] (24-08-2010 um 15:26 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 24-08-2010, 15:47   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Müsstest du nicht über den FocusEvent.FOCUS_OUT an die letzte Komponente kommen und dann könntest du händisch die nächste setzen... so die Theorie.
Omega Psi ist offline   Mit Zitat antworten
Alt 24-08-2010, 15:56   #3 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
FOCUS_OUT ist schlecht, da ich dann nicht weiß ob der user per TAB oder per Mouse den wechsel vollzogen hat. Zumindest konnte ich nichts finden anhand man dies identifiezieren konnte.
Mit der geposteten Methode bekomme ich ja auch das letzte Element, aber wenn ich den Fokus selber setze, gibts Probleme.

Gerade im Safari getestet und da funktioniert es so wie es soll. Scheint also an meinem Firefox zu liegen . Oder kann man dies durch ein internes management korrigieren?
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 24-08-2010, 16:27   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Es gibt doch auch FocusEvent.KEY_FOCUS_CHANGE und FocusEvent.MOUSE_FOCUS_CHANGE, neben FocusEvent.FOCUS_IN und FocusEvent.FOCUS_OUT. Sind die nicht interessant?
Omega Psi ist offline   Mit Zitat antworten
Alt 24-08-2010, 16:48   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Die hatte ich ehrlich gesagt nicht gesehen. Nutzen tut mir dies aber leider auch nichts, da ich in dem "KEY_FOCUS_CHANGE" nicht das neue Element geliefert bekomme welches den Fokus erhalten soll. Dieses benötige ich aber um festzustellen ob das neue Element noch zu meinem TabNavigator gehört. Beim eintreffen des KEY_FOCUS_CHANGE-Events kann ich das aktuelle Element erfragen, es läst sich aber nur umständlich feststellen ob dies das letzte oder erste Element eines Tabs ist. Da ich in der wirklichen Anwendung eine tiefe Verschachtelung habe.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 24-08-2010, 20:02   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Problem ist nun gelöst. In meinem Projekt war Deeplinking aktiviert. Der Firefox hat nach dem ändern der URL nicht mehr den Fokus auf die SWF zurück gegeben, weshalb das taben nicht mehr möglich war.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 25-08-2010, 08:59   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 11.856
Ach, verdammt. Hatte sonst noch die Idee gehabt, durch die Komponenten von innen nach aussen ein Array zu konkatenieren, in dem die Fokusreihenfolge festgelegt ist. In der Capture Phase hätte man dann schon auf System Ebene den Fokus setzen können... aber ist auch nur so eine Idee gewesen.
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Logitech G3 Maus, Taste "Empfindlichkeit umschalten" anders belegen? Samuel Am Rande 0 27-05-2009 13:14
[Flash CS4] umschalten zwischen "timeline" und "output" - fenster abschalten jav666 Flash Einsteiger 5 21-11-2008 19:21
Variablen "umschalten" mfeske Flash Einsteiger 4 27-08-2008 11:33
Nach "onKeyDown"-Event verändert Flash selbstständig den Focus.. quasimono Flash 8 10 09-04-2007 20:25
nach flashmovie"index.html" direkt auf "home.php" patrik Flash 4 und Flash 5 6 14-12-2001 15:20


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele