Curl Global Community
DropdownList のリスト表示のショートカット - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: DropdownList のリスト表示のショートカット (/showthread.php?tid=1041)



DropdownList のリスト表示のショートカット - umemura - 02-21-2014

DropdownList をクリックすると、リストが表示されますが、
これをキーボード操作で呼び出すためのショートカットは、Curlでは何に設定されているのでしょうか。

ご存知の方がいらっしゃったら教えてください。



RE: DropdownList のリスト表示のショートカット - umemura - 02-24-2014


Curlでは特に定義されていないような・・・?
エクセルの場合は、Alt+↓ なので、これに合わせるようにしてみました。

ただ、グリッド内のドロップダウン(DropdownCell)の場合は、
いろいろ気をつけないといけないようです。

コードの中にコメントでも書きましたが、セルの取得方法と、
DropdownListUI.show-dropdown の呼び出しタイミングについて、
もっと良い方法があれば教えてください。

Code:
{define-class public open CustomDropdownCell  {inherits StandardDropdownCell }
  {method protected open {create-editor}:DropdownList
    def dl = {super.create-editor}
    ||下矢印キー押下で、リストを表示
    {dl.add-event-handler
        {on k:KeyPress do
            {if k.value == KeyPressValue.down and k.alt? == true
             then
                {type-switch dl.ui-object
                 case dl-ui:SkinnableDropdownListUI do
                    ||セルフォーカスが移動しないように一応コンシュ-ム
                    {k.consume}
                    ||ドロップダウンリストが格納されているセルを取得
                    ||※ わざわざparent.parent で取得している理由は、self にしてしまうと、
                    ||   最初にドロップダウンリストを作成したセル=最初にフォーカスが入ったセルに
                    ||   ポインタが張られてしまうので、
                    ||   毎回コントロールからセルを逆取得している
                    {type-switch dl.parent.parent
                     case cell:StandardDropdownCell do
                        set cell.edit-active? = true
                    }
                    ||after を利用しないと、リストのペインが中途半端な位置に表示されてしまう
                    ||(edit-active?で高さを変更している処理の途中で実行されるため?)
                    {after 0s do
                        {dl-ui.show-dropdown}
                    }
                }
            }
        }
    }
    {return dl}
  }
}

{let people:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField "First", domain = String},
            {RecordField "Last", domain =
                {StandardStringDomain
                    default-value = "",
                    allowable-values =
                        {{Array-of String}
                            "","Mino","Okada","Mori"
                        }
                }
            },
            {RecordField "Age", domain = int}
        },
        {RecordData First = "Monta", Last = "", Age = 18},
        {RecordData First = "Hitoshi", Last = "", Age = 20},
        {RecordData First = "Akira", Last = "", Age = 40}
    }
}
{value
    {RecordGrid
        record-source = people,
        {RecordGridColumn "Last", cell-spec = CustomDropdownCell},
        height = 3cm
    }
}