在组合框中为长文本下拉项添加水平滚动条

iyr7buue  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(168)

我试过使用dropdownWidth属性,但是它是静态的。但是如果数据太长,我就不能在下拉菜单中看到完整的文本。
所以我的要求是根据下拉项文本的长宽度设置width,或者设置水平滚动条。
因为flex不支持水平滚动,所以我重写了Combobox类

<mx:FormItem id="zoneformitem" label="{Localizer.getString('zone','i18n')}" paddingLeft="60" paddingTop="15" required="true">
<mx:ComboBox id="selectedzone" open="campaigns.view.utils.CustomiZeCombo"
selectedIndex="-1" 
dropdownWidth="210" width="209" change="validateZoneSelection()" 
focusOut="validateZoneSelection()"
 dataProvider="{slotProxy.slotWizardVo.currentZones.source.
sortOn('zoneName')}" >
<mx:itemRenderer>
<mx:Component>

    public class CustomiZeCombo extends ComboBox{
    public function CustomiZeCombo(){
        super();
    }
    override public function open():void { 
        dropdown.horizontalScrollPolicy = ScrollPolicy.ON; 
        super.open(); 
    } 

override protected function 
       downArrowButton_buttonDownHandler(event:FlexEvent):void { 
        dropdown.horizontalScrollPolicy = ScrollPolicy.ON; 
        super.downArrowButton_buttonDownHandler(event); 
        } 
    }

但是我不知道如何调用那个事件来使它工作。非常感谢你的建议。

ecfsfe2w

ecfsfe2w1#

尝试在Combobox中使用click()调用以下方法。

private function setWidthForLongdata():void {
        var width:int;
        width = selectedzone.width;
        var maxWidth:int;
        maxWidth = width + (width/2);

        for each (var zone:ZoneVO in slotProxy.slotWizardVo.currentZones.source) {
        if(zone.zoneName.length > maxLen ) {
        maxLen = zone.zoneName.length;
        }
        }

        if(maxLen*13 > width) {
        width = maxLen*13;

        if(width>maxWidth) {
        width = maxWidth;
        }
        }
        selectedzone.dropdown.width=width;
        }

相关问题