Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-01-2009, 11:29   #1 (permalink)
Neuer User
 
Benutzerbild von dan-b
 
Registriert seit: Sep 2008
Beiträge: 8
Fokus auf ein TextInput bei CREATION_COMPLETE setzen

Hi,

ich habe ein Popup mit einem Texteingabefeld, das beim Öffnen des Popups sofort den Fokus bekommen soll. Zwei Wege, die vielversprechend aussahen, habe ich bisher versucht:

Das ist das Textfeld:
Code:
<mx:TextInput id="txtInput" focusIn="trace('Fokus bekommen!');" />
Eventhandler für creationComplete:
Code:
<mx:TitleWindow
      title=""
      layout="horizontal"
      xmlns:mx="http://www.adobe.com/2006/mxml"
      creationComplete="eventListener(event)">
Und die Funktion dazu:
Code:
private function eventListener(event:Event):void {
   switch(event.type) {
      case FlexEvent.CREATION_COMPLETE:
         trace("Setze Fokus");
         focusManager.showFocusIndicator = true;
         focusManager.setFocus(this.txtInput);
         trace("Fokus gesetzt auf " + Object(focusManager.getFocus()).name);
         break;
   }
}
Folgendes sehe ich jetzt im Trace:
Code:
Setze Fokus
Fokus bekommen!
Fokus gesetzt auf txtInput
Also sowohl TextInput als auch der FocusManager sind der Meinung, dass der Fokus richtig gesetzt ist. Aber man sieht es nicht, dass der Fokus auf TextInput gestzt ist, d.h. keine farbliche Umrandung und kein Cursor im Eingabefeld.

Auch folgende Implementierung (im Web zusammengesucht) bringt nicht das gewünschte Ergebnis, obwohl die Logausgabe die gleiche ist:
Code:
this.txtInput.setFocus();
this.txtInput.setSelection(0,0);
this.txtInput.drawFocus(true);
Was allerdings geht ist der händische Weg, der genau das macht, was ich erwarte:
Code:
<mx:Button click="focusManager.setFocus(this.txtInput);" label="Fokus setzen" />
Was zum Geier ist der Unterschied??? Ich werd' noch zum Hirsch!
dan-b ist offline   Mit Zitat antworten
Alt 16-01-2009, 11:34   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Sonst checke mal:
ActionScript:
  1. if (stage)
  2.     stage.focus = txtinput;
Omega Psi ist offline   Mit Zitat antworten
Alt 16-01-2009, 11:43   #3 (permalink)
Neuer User
 
Benutzerbild von dan-b
 
Registriert seit: Sep 2008
Beiträge: 8
"There's more than one way to do it"

Code:
if (stage) {
   trace("Schon auf der Bühne, setze Fokus"); 
   stage.focus = this.txtInput;
}
und das Trace:
Code:
Schon auf der Bühne, setze Fokus
Fokus bekommen!
Fokus gesetzt auf txtInput
Leider das gleiche Ergebnis :-( Das Framework meint, der Fokus wäre gesetzt, aber die GUI ändert sich nicht.

Gab es nicht mal einen Weg, die GUI wie nach einem Mausklick zu "refreshen"? Hilft das hier vielleicht was?
dan-b ist offline   Mit Zitat antworten
Alt 16-01-2009, 11:53   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.147
Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application backgroundColor="0xFFFFFF"
                creationComplete="eventListener(event)"
                layout="vertical"
                xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			private function eventListener(event:Event):void
			{
				switch(event.type)
				{
					case FlexEvent.CREATION_COMPLETE:
						focusManager.setFocus(textInput);
						break;
					case FocusEvent.FOCUS_IN:
						trace(event.currentTarget, event.target);
						break;
				}
			}
		]]>
	</mx:Script>
	<mx:TextInput focusEnabled="true"
                  focusIn="eventListener(event)"
                  id="textInput" />
</mx:Application>
Das tut bei mir.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-01-2009, 07:11   #5 (permalink)
Neuer User
 
Benutzerbild von dan-b
 
Registriert seit: Sep 2008
Beiträge: 8
Das Problem scheint bei der Verwendung meiner Komponente als Popup zu liegen. Ich lasse mir mal eine Meldung ausgeben, wenn das Eingabefeld den Fokus verliert:

Code:
<mx:TextInput id="txtInput" focusIn="trace('Fokus bekommen!');"  focusOut="trace('Fokus verloren!');"/>
Und tatsächlich: das Feld bekommt den Fokus, verliert ihn dann aber aus irgendwelchen Gründen wieder

So verwende ich die Komponente von aussen:

Code:
var validationWindow:ValidationWindow = ValidationWindow(
      PopUpManager.createPopUp(this, ValidationWindow, true));
PopUpManager.centerPopUp(validationWindow);
Kann es sein, dass das Zentrieren des Popups den Fokus stiehlt? Das wäre das einzige, was ich mir jetzt noch vorstellen kann. Klaut dem Textfeld den Fokus und gibt ihn dem ganzen Popup-Fenster...
dan-b 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele