قم بتعطيل الضغط CTRL لاختيار قيم متعددة في القائمة

لدي جهاز itemrenderer مخصص ل Spark.List

<?xml version="1.0" encoding="utf-8"?>

    
        
        
        
    
    


القائمة:

        private function get UOAbilitate():List
        {
            var l:List = new List();
            l.dataProvider = listaUOA;
            l.allowMultipleSelection = true;                
            l.itemRenderer = new ClassFactory(CheckBoxItemRenderer);
            return l;                   
        }
        [Bindable]private var listaUOA:ArrayCollection = new ArrayCollection([
                {name: "Uo1"},
                {name: "Uo2"},
                {name: "Uo3"},
                {name: "Uo4"},
                {name: "Uo5"},
                {name: "Uo6"},
                {name: "Uo7"},
                {name: "Uo8"},
                {name: "Uo9"},
                {name: "Uo10"},
                {name: "Uo11"},
                {name: "Uo12"}
            ]);     

تتصرف خانات الاختيار بالطريقة الصحيحة. إذا قمت بتحديد قيمة واحدة ، فسيؤدي اختيار واحد آخر إلى تحديد القيمة الجديدة وإلغاء تحديد أقدم.

باستخدام CTRL تبقى كل العناصر المحددة ... سوف أحصل على نفس النتيجة دون الحاجة للضغط على مفتاح ctrl ...

1

2 إجابة

أسهل طريقة للقيام بذلك هي إنشاء فئة فرعية من القائمة مثل:

public class MyList extends List {

    public function MyList() {
        allowMultipleSelection = true;
    }

    override protected function item_mouseDownHandler(event:MouseEvent):void {
        event.ctrlKey = true;
        super.item_mouseDownHandler(event);
    }

}

قمنا بتعيين allowMultipleSelection إلى true بشكل افتراضي (القيمة الافتراضية لمكون القائمة هي false ) ، ونحن اعتراض MouseEvent.MOUSE_DOWN حتى نتمكن من يمكن خداع القائمة إلى التفكير في الضغط باستمرار على المفتاح CTRL.

If you're looking for a similar behaviour for the DataGrid class, read this answer: SelectItem Method in spark Datagrid?

ملاحظة: بالنسبة لقائمة حالة CheckBoxes ، قمت بإنشاء مكون مخصص قابل لإعادة الاستخدام يسمى CheckBoxGroup يقوم بذلك ويقوم أيضًا بتعيين CheckBoxItemRenderer بشكل افتراضي. بهذه الطريقة لا يتعين علي فعل هذا مرارا وتكرارا. (كما أنها تقدم بعض العناصر المخصصة الأخرى ، مثل تحديد جميع المربعات في وقت واحد ، ولكن هذا خارج الموضوع هنا).

2
وأضاف

الحل أعلاه يعمل ، ولكن هناك خطأ صغير! الرمز الصحيح هو:

public class MyList extends List {

    public function MyList() {
        allowMultipleSelection = true;
    }

    override protected function handleCellRendererClick(event:MouseEvent):void {
         event.ctrlKey = true;
        super.handleCellRendererClick(event);
    }
}
0
وأضاف
إذا كنت تقترح فقط قرصًا بسيطًا أو تصحيحًا لإجابة موجودة ؛ الطريقة الصحيحة للقيام بذلك هي إما ترك تعليق أو إجراء تعديل عليه.
وأضاف المؤلف Dan Neely, مصدر