Как я могу исправить эту потенциальную ошибку с компонентом Combobox во Flash?

StackOverflow https://stackoverflow.com/questions/3652470

Вопрос

Когда я добавляю компонент Combobox в спрайт, высота контейнера больше, чем она должна.

Вот что я имею в виду:

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

Примечание: Вам понадобится компонент Combobox в вашей библиотеке. Я использую Flash CS3 для этого.

Если я невернирую / перерисовать, как это:

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

Высота меняется с 101 до 104.

Любые решения?

ОБНОВИТЬ:Я перезаписал метод Configui в подклассе Combobox, но измерения все время верны. Почему высота контейнера изменяется на 100?

Это было полезно?

Решение

Это из-за Adobe Sylly Implantation Flash Components, если вы посмотрите в 2-й кадре компонента внутри вспышки, вы можете увидеть, что это временный аватар, который возвращает начальный размер.

enter image description here

Чтобы решить это, вы должны итерации по аватару детей и нормализовать их размер:

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;
    }
}

Применение:

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

Другие советы

«Если он открыт, то высота с опущенным ящиком»

Хм, я думаю, когда список добавляется к отображенному списку под кнопкой, его на самом деле добавлено, имеет всплывающее окно. Таким образом, высота должна оставаться высотой кнопки, поскольку SPRITE никогда не будет содержать раскрывающийся список.

Возможная причина, по которой высота контейнера может быть неверной, прежде чем он пройдет через любую недействию, может быть связано с детьми, которые он содержит. Может быть, кожа Combobox (может быть мозилипсовой высотой 102px) или подкомпонент Combobox, который всегда начинается с высоты 102 пикселей или со странной высотой (текстовое поле в кнопке, как известно, что-то не так).

Простое решение было бы дождаться до доставки события для создания / добавления и не посмотреть, что является конечной высотой, затем нарисуйте границу.

Я не думаю, что это ComboBox Эксклюзивная ошибка.

Когда я добавляю компонент Button к А. Sprite Контейнер, который я также получаю разные результаты при отслеживании кнопки и размеров контейнера. На самом деле, я получаю то же самое 100 x 100 Результаты.

Я бы отказался от выпадающей возможности коробки, так как Button Компонент не имеет одного.

Я думаю, что обходной путь будет одинаковым для объектов 2 компонентов (ComboBox а также Button), но я еще не нашел решение. Обновит, когда я делаю.

ОБНОВИТЬ:

Я просто смог получить эту работу, используя validateNow(), И через несколько минут - я нашел следующую ссылку: http://forums.Adobe.com/message/816912?tstart=0.

По сути, ссылка дает нам поставить validateNow() Позвоните внутри АН EnterFrame событие или внутри SetTimeout с надлежащим временем.

Итак, я думаю, что отображаемая высота Поле со списком это действительный Высота - ID EST, если оно открыто, то высота с выпадомной коробкой, если нет, без. Однако - предметы все еще там, хотя с .Вистимы ложный, который по-прежнему расширяет контейнер, даже если вы не видите это ... Поэтому - я бы сказал:

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

Это способ обычно сделать это тоже ...

Можете ли вы настроить вручную перед этим кодом:

container.width=100;

container.height=100;

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

Привет, я нашел где-то решение для аналогичной проблемы с NumericStepper.

И решение было:

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

В вашем случае попробуйте следующее:

var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22; 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top