【AutoHotkey】連続するDropDownListの値取得

いつも通り俺得なツールを作っているAutoHotkey。

 

最近はショートカットでスクリプトを組むというよりも

ちょっとしたGUIのアプリを作ることが多い。

 

 

 

 

1画面内にドロップダウンリストが多数ある画面を作った。

 

こんな感じの

こんな感じの。

 

このコードは

Gui, Add, Text, %DDL_NAME_POSITION%, A項目
Gui, add, DropDownList, %DDL_VALUE_POSITION% VaName, %aNameDdList%
Gui, Add, Text, %DDL_NAME_POSITION%, B項目
Gui, add, DropDownList, %DDL_VALUE_POSITION% VbName, %bNameDdList%
Gui, Add, Text, %DDL_NAME_POSITION%, C項目
Gui, add, DropDownList, %DDL_VALUE_POSITION% VcName, %cNameDdList%
Gui, Add, Text, %DDL_NAME_POSITION%, D項目
Gui, add, DropDownList, %DDL_VALUE_POSITION% VdName, %dNameDdList%

こんな感じになっている。

色々と定数にしてるけど、本題はそこではないw

 

各ドロップダウンリストのV****(例ではVaName等)が変数名で

Gui, Submit

をした後に%aName%で、ドロップダウンリストに表示している文字列が取得できる。

 

値を1つずつ処理しながら使用するなら良いんだけど、ドロップダウンリストの文字列を

連結していくような処理の場合に

 

hogeText = % aName . ※なんか文字列とか※ . bName . ※なんか文字列とか※

 

なんて書くのは許せない美しくない!

 

上記の例では変数名に法則性があるけど、実際にはドロップダウンリストの変数名はバラバラ。

なんかこう、ループ処理で綺麗にできないものだろうか。

「格納されているのは文字列だけど実は変数名」的な。

 

 

調べていたら方法はあった。

 

 

まずはこんな感じで配列に変数名(の文字列)を格納する。

global ArrayNameList := Object()
ArrayNameList.Insert("aName")
ArrayNameList.Insert("bName")
ArrayNameList.Insert("cName")
ArrayNameList.Insert("dName")

 

んで、処理側は

aaaText =
For index, ddListName in ArrayNameList
{
  StringTrimLeft, outValue, %ddListName%, 0
  aaaText .= outValue . "`n"
}

 

赤文字のStringTrimLeftというコマンドがキモ。

本来は文頭の文字をカットするコマンドなんだけど、

「変数名が入った変数(ややこしい)」を指定することで変数として扱える。

あとはループでグリグリ回すだけだ。

 

ここに行き着くまでに結構時間を使った。

いかんなぁ・・・衰えてるなぁ・・・w

 

カテゴリー: ソフトウェア, 技術的 タグ: , , , , ,  [パーマリンク]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です