كيف يمكنني إصلاح هذا الخطأ المحتمل مع مكون Combobox في Flash؟
-
01-10-2019 - |
سؤال
عندما أضيف مكون 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.
أي حلول؟
تحديث:لقد كتبت طريقة التكوين في فئة فرعية Combobox ، ولكن القياسات صحيحة طوال الوقت. لماذا يتغير ارتفاع الحاوية إلى 100؟
المحلول
هذا بسبب زرع Adobe السخيف لمكونات الفلاش ، إذا نظرت في الإطار الثاني لمكون داخل فكرة فلاش ، يمكنك رؤية الصورة الرمزية المؤقتة التي تُرجع الحجم الأولي.
لحل هذا ، يجب أن تكرر على الأطفال الرمزية وتطبيع حجمهم:
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);
نصائح أخرى
"إذا تم فتحه ، فإن الارتفاع مع المربع المنسدلة"
حسنًا ، أعتقد أنه عندما تتم إضافة القائمة إلى قائمة العرض أدناه الزر ، تمت إضافته فعليًا على نافذة منبثقة. لذلك من المفترض أن يظل الارتفاع هو ارتفاع الزر ، لأن العفريت لن يحتوي على القائمة المنسدلة.
سبب محتمل قد يكون ارتفاع الحاوية خاطئًا قبل أن يمر بأي إبطال قد يكون بسبب الأطفال الذين يحتويون عليه. ربما يكون جلد Combobox (يمكن أن يكون موفقًا من ارتفاع 102 بكسل) أو مكونًا فرعيًا Combobox الذي يبدأ دائمًا من ارتفاع 102 بكسل أو مع ارتفاع غريب (من المعروف أن حقل Text في زر ما هو خطأ في وقت ما).
سيكون الحل البسيط هو الانتظار حتى حدث CreateComplete/إضافة ومعرفة ما هو الارتفاع النهائي ، ثم ارسم الحدود.
لا أعتقد هذا أ ComboBox
علة حصرية.
عندما أضيف مكونًا Button
إلى Sprite
حاوية أحصل أيضًا على نتائج مختلفة عند تتبع الزر وأبعاد الحاوية. في الواقع ، أتلقى نفس الشيء 100 x 100
النتائج.
أود أن أتجاهل إمكانية الصندوق المنسدلة ، لأن Button
المكون ليس لديه واحد.
أعتقد أن الحل البديل سيكون هو نفسه بالنسبة لكائن المكونات 2 (ComboBox
و Button
) ، لكنني لم أجد الحل بعد. سيتم تحديث عندما أفعل.
تحديث:
كنت قادرًا على الحصول على هذا العمل باستخدام validateNow()
, وبعد بضع دقائق - وجدت الرابط التالي: http://forums.adobe.com/message/816912؟tstart=0
في الأساس ، يرشدنا الرابط إلى وضع validateNow()
اتصل داخل AN 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;