Просмотр полной версии : Изменение высоты TextField в CheckBox
Здравствуйте.
Подскажите, как можно изменить высоту TextField в CheckBox? Точнее она уменьшена, но CheckBox ведет себя как TextField, у которого не задан TextFieldAutoSize: объекты расположенные ниже чекбокса отодвинуты визуально на 100 пикселей хотя:
this.repeatCheckBox.textField.autoSize = TextFieldAutoSize.LEFT;
trace(this.repeatCheckBox.textField.height); // 19
trace(this.repeatCheckBox.textField.y); // 0
trace(this.repeatCheckBox.height); // 22
trace(this.repeatCheckBox.y); // 0
результат все равно:
http://s017.***********/i439/1110/ea/96cb4c6d376f.gif (http://www.***********)
ну
this.repeatCheckBox.textField.height =19
и тогда не должно быть 100px
а может дело не в TextField
там может какой другой спрайт еще
ну
this.repeatCheckBox.textField.height =19
и тогда не должно быть 100px
а может дело не в TextField
там может какой другой спрайт еще
Даж и не знаю, куда думать..
Это не работает:
this.repeatCheckBox.textField.height =19
Это тоже не работает:
this.repeatCheckBox.setSize(50,20);
попробуй удалить этот текст и посмотреть на реакцию..
this.repeatCheckBox.removeChild(textField)
если отступ продолжает быть.- дело в другом
попробуй удалить этот текст и посмотреть на реакцию..
this.repeatCheckBox.removeChild(textField)
если отступ продолжает быть.- дело в другом
Все становится нормально после удаления. При добавлении — снова сдвигается вверх, т.к. чекбокс занимает 100 px.
CheckBox#labelPlacement (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/controls/LabelButton.html#labelPlacement)
В случае если вам это не подойдет, то необходимо создать собственный класс (который наследуется от CheckBox), у которого следует переопределить метод drawLayout
this.repeatCheckBox.removeChild(textField)
var textField:TextField=new TextField();
textField.height=19;
textField.width=100 - 20;
textField.text="проверка";
this.repeatCheckBox.addChild(textField);
а так)
Azo, так нельзя делать, это плохой подход. Вы консервным ножом вскрываете банку с откручиваемой крышкой.
Правильно будет использовать переопределение метода, либо «нативного» labelPlacement.
this.repeatCheckBox.removeChild(textField)
var textField:TextField=new TextField();
textField.height=19;
textField.width=100 - 20;
textField.text="проверка";
this.repeatCheckBox.addChild(textField);
а так)
Та то же самое.
Значить что-то в чекбоксе кроме такстфилда есть, только вот как до этого добраться?..
Добавлено через 1 минуту
Azo, так нельзя делать, это плохой подход. Вы консервным ножом вскрываете банку с откручиваемой крышкой.
Правильно будет использовать переопределение метода, либо «нативного» labelPlacement.
labelPlacement —*меняет положение лейбла, но высота чекбокса, к сожалению, не изменяется.
Компоненты fl.controls.* - это капризные компоненты.
У меня была похожая проблема с TextArea (не хотел уменьшаться невидимый вертикальный скроллбар).
NumericStepper тоже глючил (не помню детали).
В вашем случае не уменьшается один из вложенных компонентов.
Попробуйте trace. Что напишет?
for (var i:int=0;i<this.repeatCheckBox.numChildren;i++) {
trace(this.repeatCheckBox.getChildAt(i).name,
this.repeatCheckBox.getChildAt(i),
this.repeatCheckBox.getChildAt(i).width,
this.repeatCheckBox.getChildAt(i).height);
}
После этого сделайте trace детей компонента с "ненормальной" шириной/высотой.
Можете также поустанавливать opaqueBackground:
this.repeatCheckBox.opaqueBackground = 0xff0000;
И для "деток":
this.repeatCheckBox.getChildAt(0).opaqueBackground = 0x00ff00;
this.repeatCheckBox.getChildAt(1).opaqueBackground = 0x0000ff;
... до numChildren
Сама по себе такая установка opaqueBackground может повлиять на поведение глюка.
Srednas, значит воспользуйтесь переопределением метода drawLayout, делов то 5 минут
Компоненты fl.controls.* - это капризные компоненты.
У меня была похожая проблема с TextArea (не хотел уменьшаться невидимый вертикальный скроллбар).
NumericStepper тоже глючил (не помню детали).
В вашем случае не уменьшается один из вложенных компонентов.
Попробуйте trace. Что напишет?
for (var i:int=0;i<this.repeatCheckBox.numChildren;i++) {
trace(this.repeatCheckBox.getChildAt(i).name,
this.repeatCheckBox.getChildAt(i),
this.repeatCheckBox.getChildAt(i).width,
this.repeatCheckBox.getChildAt(i).height);
}
После этого сделайте trace детей компонента с "ненормальной" шириной/высотой.
Можете также поустанавливать opaqueBackground:
this.repeatCheckBox.opaqueBackground = 0xff0000;
И для "деток":
this.repeatCheckBox.getChildAt(0).opaqueBackground = 0x00ff00;
this.repeatCheckBox.getChildAt(1).opaqueBackground = 0x0000ff;
... до numChildren
Сама по себе такая установка opaqueBackground может повлиять на поведение глюка.
Да.. Выводит виновников.
instance54 [object focusRectSkin] 104 104
instance53 [object Shape] 100 100
instance52 [object TextField] 54 19
Добавлено через 1 минуту
Srednas, значит воспользуйтесь переопределением метода drawLayout, делов то 5 минут
Не дошел я пока до переопределения методов.
Подскажите на примере как это сделать?
Не дошел я пока до переопределения методов.
Подскажите на примере как это сделать?
mayakwd, извини если опередил.
package {
import fl.controls.CheckBox;
import flash.display.DisplayObject;
public class mycb extends CheckBox{
public function mycb() {
// constructor code
}
override protected function drawLayout():void {
var badObject: DisplayObject = this.getChildAt(1); // проблемный instance
badObject.width = 50;
badObject.height = 50;
}
}
}
Пример рабочий, но не оптимальный.
Надо бы еще проверять badObject на предмет наличия, действительно ли он превышает допустимые размеры и т.п.
(можно, например сделать перебор "детей" в цикле с проверкой/установкой размеров)
Если у вас нет ресайза, то можно вместо drawLayout вписать код в конструткор.
Также в этом случае и если чекбокс один - можно вообще не создавать класс, а при инициализации просто задать размеры "проблемных детей".
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.