如何使用Flash中的ComboBox组件修复此潜在错误?
当我将ComboBox组件添加到Sprite中时,容器的高度比它应该的要大 我的意思是:如何使用Flash中的ComboBox组件修复此潜在错误?,flash,actionscript-3,uicomponents,flash-ide,Flash,Actionscript 3,Uicomponents,Flash Ide,当我将ComboBox组件添加到Sprite中时,容器的高度比它应该的要大 我的意思是: 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 o
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子类中的configUI方法,但是度量值始终是正确的。为什么容器高度会变为100?所以-我猜组合框的显示高度是实际高度-id est,如果打开,则为带下拉框的高度,如果没有,则为不带下拉框的高度。但是-项目仍然存在,尽管将.visible设置为false,这仍然会扩展容器,即使您看不到。。。因此,我想说:
container.graphics.drawRect(0, 0, combo.width, combo.height);
这也是通常的做法…因此-我猜组合框的显示高度是实际高度-id est,如果打开,则是带有下拉框的高度,如果没有,则没有。但是-项目仍然存在,尽管将.visible设置为false,这仍然会扩展容器,即使您看不到。。。因此,我想说:
container.graphics.drawRect(0, 0, combo.width, combo.height);
这也是通常执行此操作的方法…在执行此代码之前,是否可以手动设置:
container.width=100代码>
容器高度=100代码>
container.graphics.drawRect(0,0,container.width,container.height)代码>在此代码之前,是否可以手动设置:
container.width=100代码>
容器高度=100代码>
container.graphics.drawRect(0,0,container.width,container.height)代码>“如果已打开,则使用下拉框显示高度”
嗯,我认为当列表被添加到按钮下面的显示列表时,它实际上添加了一个弹出窗口。所以高度应该保持按钮高度,因为精灵永远不会包含下拉列表
在容器失效之前,容器高度可能错误的一个可能原因是它包含的子容器。可能是组合框外观(可能是高度为102px的movieClip)或总是以102px高度或奇怪高度开始的组合框子组件(按钮中的文本字段有时会出错)
一个简单的解决方案是等待creationComplete/added事件,然后查看最终高度,然后绘制边框。“如果打开边框,则使用下拉框显示高度。”
嗯,我认为当列表被添加到按钮下面的显示列表时,它实际上添加了一个弹出窗口。所以高度应该保持按钮高度,因为精灵永远不会包含下拉列表
在容器失效之前,容器高度可能错误的一个可能原因是它包含的子容器。可能是组合框外观(可能是高度为102px的movieClip)或总是以102px高度或奇怪高度开始的组合框子组件(按钮中的文本字段有时会出错)
一个简单的解决方案是等待creationComplete/added事件完成,然后查看最终高度,然后绘制边界。嗨,我在某个地方找到了一个解决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;
嗨,我在某个地方找到了一个解决类似问题的方法
解决办法是:
var tInput:TextInput = numericStepper.getChildAt(2) as TextInput;
tInput.textField.height = 22;
在您的情况下,请尝试以下操作:
var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22;
我不认为这是一个
组合框
独有的bug
当我将组件按钮
添加到精灵
容器时,跟踪按钮和容器尺寸时,我也会得到不同的结果。实际上,我收到了相同的100x100
结果
我将放弃下拉框的可能性,因为按钮
组件没有下拉框
我认为对于两个组件对象(ComboBox
和Button
)的解决方法是相同的,但我还没有找到解决方案。会在我更新时更新
更新:
我刚刚能够使用validateNow()
实现这一点,几分钟后,我找到了以下链接:
本质上,该链接指示我们将validateNow()
调用放在EnterFrame
事件中,或者放在SetTimeout
中,并进行适当的计时。我不认为这是一个组合框
独占性错误
当我将组件按钮
添加到精灵
容器时,跟踪按钮和容器尺寸时,我也会得到不同的结果。实际上,我收到了相同的100x100
结果
我将放弃下拉框的可能性,因为按钮
组件没有下拉框
我认为对于两个组件对象(ComboBox
和Button
)的解决方法是相同的,但我还没有找到解决方案。会在我更新时更新
更新:
我刚刚能够使用validateNow()
实现这一点,几分钟后,我找到了以下链接:
本质上,该链接指示我们将validateNow()
调用放在EnterFrame
事件中,或者放在SetTimeout
中,并进行适当的计时。这是因为安装了Flash组件,如果您查看Flash IDEA中组件的第二帧,您可以看到它是返回初始大小的临时化身
要解决此问题,您应该迭代化身子对象并使其大小正常化:
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;
}
}
这是因为Adobe愚蠢地植入了Flash组件,如果你在第二帧中看到一个Flash组件,你就会产生这样的想法