Frage

Wenn ich eine ComboBox-Komponente in einen Sprit hinzuzufügen, die Höhe des Behälters ist größer als es sein sollte.

Hier ist, was ich meine:

import fl.controls.ComboBox;
//add combo box inside a container sprite
var combo:ComboBox = new ComboBox();
var container:Sprite = new Sprite();
addChild(container);
container.addChild(combo);
//draw the outline of the container sprite
container.graphics.lineStyle(1,0x009900);
container.graphics.drawRect(0,0,container.width,container.height);
//I don't get this:
trace(combo.height);//outputs 22
trace(container.height);//outputs 101

Hinweis: Sie werden die ComboBox-Komponente in der Bibliothek benötigen. Ich bin mit Flash CS3 für diese.

Wenn ich Invalidier / neu zu zeichnen, wie folgt aus:

combo.invalidate(InvalidationType.ALL,true);
combo.drawNow();

die Höhenänderungen von 101 bis 104

Jede Lösungen?

UPDATE: Ich habe die configui Methode in einer ComboBox Unterklasse überschrieben, aber die Messungen korrekt sind die ganze Zeit. Warum werden in der Behälterhöhe Änderung auf 100?

War es hilfreich?

Lösung

Dies ist wegen der Adobe dumme Implantation von Flash-Komponenten, wenn Sie in der 2. Rahmen einer Komponente in einem Flash-IDEA schauen, können Sie es vorübergehend Avatar sehen, die die ursprüngliche Größe zurückgibt.

eingeben Bild Beschreibung hier

lösen diese sollten Sie die Avatar Kinder durchlaufen und ihre Größe normalisieren:

public static function normalizedComponent(component:Sprite):void {
    for (var i:int = 0; i < component.numChildren; i++) {
        component.getChildAt(i).height = component.height;
        component.getChildAt(i).width = component.width;
    }
}

Nutzung:

var comboBox:ComboBox = new ComboBox();
normalizedComponent(comboBox);
normalizedComponent(comboBox.textField);

Andere Tipps

„wenn es geöffnet wird, dann ist die Höhe mit der Dropdown-Feld“

Hmm, ich denke, wenn die Liste an die Displaylist unter der Schaltfläche hinzugefügt wird, seine tatsächlich hat ein Popup hinzugefügt. So ist die Höhe soll die Schaltfläche Höhe bleiben, da wird das Sprite eigentlich nie die Dropdown-Liste enthalten.

Ein möglicher Grund die Behälterhöhe falsch sein könnte, bevor es jeden Ungültigkeits geht durch die Kinder zurückzuführen sein könnte es enthält. Vielleicht ist die Combobox Haut (könnte ein Movieclip von 102px Höhe sein) oder eine Combobox Subkomponente immer, dass bei 102px Höhe oder mit seltsamer Höhe beginnen (TextField- in einem Knopf ist bekannt, irgendwann falsch zu sein).

Eine einfache Lösung wäre, zu warten, bis ein creation / hinzugefügt Ereignis und sieht, was die endgültige Höhe ist, dann die Grenze ziehen.

Ich glaube nicht, das ein ComboBox exklusiven Fehler.

Wenn ich eine Komponente Button zu einem Sprite Behälter füge ich auch unterschiedliche Ergebnisse erhalten, wenn Sie die Taste und die Behälterabmessungen zu verfolgen. Eigentlich erhalte ich die gleichen 100 x 100 Ergebnisse.

Ich würde die Dropdown-Feld Möglichkeit außer Acht lassen, da die Button Komponente keinen hat.

ich glaube, das Problem zu umgehen das gleiche für die 2-Komponenten-Objekte sein würde (ComboBox und Button), aber ich habe nicht die Lösung nur noch nicht gefunden. Wird aktualisiert, wenn ich es tue.

UPDATE:

Ich war nur in der Lage diese Arbeit mit validateNow() zu bekommen, und ein paar Minuten später - ich fand den folgenden Link: http://forums.adobe.com/message/816912?tstart=0

Im Wesentlichen der Link weist uns den validateNow() Anruf innerhalb eines EnterFrame Ereignisses zu setzen, oder in einem SetTimeout mit dem richtigen Timing.

So - ich denke, die angezeigte Höhe von ComboBox ist der ist Höhe - id est, wenn es geöffnet wird, dann ist die Höhe mit dem Drop-Down-Box, wenn nicht dann OHNE. Allerdings - die Elemente sind immer noch da, wenn auch mit .visible auf false , die immer noch den Container erweitert, auch wenn Sie nicht sehen können ... Deshalb - ich würde zu tun, sagen:

container.graphics.drawRect(0, 0, combo.width, combo.height);

ist, dass der Weg, es zu tun in der Regel auch ...

können Sie Setup manuell vor diesem Code:

container.width=100;

container.height=100;

container.graphics.drawRect(0,0,container.width,container.height);

Hallo ich fand irgendwo eine Lösung für ein ähnliches Problem mit NumericStepper.

und die Lösung war:

var tInput:TextInput = numericStepper.getChildAt(2) as TextInput;
tInput.textField.height = 22; 

In Ihrem Fall versuchen Sie Folgendes:

var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22; 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top