0

ComboxBox を持つ ItemEditor があります。ユーザー エクスペリエンスを向上させるために、ユーザーがコンボボックスで値を選択するたびに ItemEditor を終了したいと考えています。そのため、セルの外側をクリックして選択を検証する必要はありません。

私はこれをしましたが、うまくいきません。なんで ?

        private function comboChange(event:IndexChangeEvent):void
        {
            var dgOrder:DataGrid = owner as DataGrid;
            var dgEvent:GridEvent = new GridEvent(GridEvent.GRID_CLICK);
            dgEvent.preventDefault();
            dgOrder.dispatchEvent(dgEvent);

        }
    ]]>
</fx:Script>

<s:ComboBox id="ddlCurrency" width="100%" dataProvider="{lstCurrencies}" labelField="CurrencyCode" 
            prompt="Select a currency" change="comboChange(event)"></s:ComboBox>

Marcxコメントの後に編集:

override public function get value():Object {
                trace("get value");
                ddlCurrency.selectedIndex = newCountryID;
            if (ddlCurrency.selectedIndex == -1 || ddlCurrency.selectedItem.CurrencyID == -1){
                updateCurrency(data.OrderID, -1);
                return "";
                } else if ((lstCurrencies[ddlCurrency.selectedIndex as int] as Object).CurrencyCode.toString() != ddlCurrency.selectedItem.CurrencyCode){
                    return oldValue;
                } else {
                    updateCurrency(data.OrderID, ddlCurrency.selectedItem.CurrencyID);
                    return ddlCurrency.selectedItem.CurrencyCode;
                }
            }

private function comboChange(event:IndexChangeEvent):void
            {
                var dgOrder:DataGrid = owner as DataGrid;
                newCountryID = ddlCurrency.selectedIndex;
                dgOrder.setFocus();
            }

dropdownList で値を選択すると (以前はコンボボックスでした)、combochange が呼び出され、ddlCurrency.selectedIndex が選択したばかりで、get value() 関数が呼び出されると、同じ ddlCurrency.selectedIndex が前の索引。get value() で新しいインデックスを強制するために、新しいインデックスを変数に保存するのはそのためです。

私は自分自身を明確にしたことを願っています。

前もって感謝します。アントワーヌ。

4

1 に答える 1

0

親要素または直接アプリケーションにフォーカスを設定してみることができます...

private function comboChange(event:IndexChangeEvent):void
{
    var dgOrder:DataGrid = owner as DataGrid;
    var dgEvent:GridEvent = new GridEvent(GridEvent.GRID_CLICK);
    dgEvent.preventDefault();
    dgOrder.dispatchEvent(dgEvent);
    // set the focus on the owner component
    dgOrder.setFocus();             
}

as3docs から:

spark.components.DataGrid.setFocus():void

[継承] このコンポーネントにフォーカスを設定します。コンポーネントは、サブコンポーネントにフォーカスを渡すことができます。

注:このメソッドがフォーカスを設定すると、TextInput コントロールと TextArea コントロールのみが強調表示されます。ユーザーがタブでコントロールに移動すると、すべてのコントロールが強調表示されます。

于 2015-08-27T10:43:22.917 に答える