[Winform] フォーム上のコントロールへのアクセス [PowerShell]
Winformで、フォーム上に配置されたコントロールは、
フォームの Controls プロパティ(Control.ControlCollection)に格納されています。
この中の目的のコントロールに名前を指定してアクセスするために PowerShell では次のように書きます。
コントロール名を連想配列のキーとして扱うような記述方法ですね。
(フォーム $this の中の tableLayoutPanelBase という名前(Name プロパティ値)を持つ
コントロールを変数 panel に格納する例です。)
また、たとえばイベントハンドラー(関数やスクリプトブロック)からアクセスしたいようなコントロールは、フォームから順にたどってアクセスするのではなく、作成時などに script スコープの変数に入れておけば、その変数を使ってアクセスすることも可能です。
コントロールを作成する関数内にイベントハンドラースクリプトブロックを記述すれば、local スコープの変数でも見えるのかと思いましたが、そうではないようです。たとえば次のようなスクリプトで、イベントハンドラー($OnShowDialog1)の《記述場所》はコントロールを作成したスコープの内側だとしても、実行時にはそうではないといういうことなのでしょう、おそらく。
フォームの Controls プロパティ(Control.ControlCollection)に格納されています。
この中の目的のコントロールに名前を指定してアクセスするために PowerShell では次のように書きます。
コントロール名を連想配列のキーとして扱うような記述方法ですね。
(フォーム $this の中の tableLayoutPanelBase という名前(Name プロパティ値)を持つ
コントロールを変数 panel に格納する例です。)
$panel = $this.Controls['tableLayoutPanelBase']入れ子になったパネルの上のコントロールへのアクセスは次のように続けて書くこともできます。長いですけど。
$checkBoxMonitor =Controls の要素には、名前ではなく配列のインデックス番号で Controls[0] のようにしてアクセスすることも可能です。
$this.Controls['tableLayoutPanelBase'].Controls['tableLayoutPanelData'].
Controls['checkBoxMonitor']
また、たとえばイベントハンドラー(関数やスクリプトブロック)からアクセスしたいようなコントロールは、フォームから順にたどってアクセスするのではなく、作成時などに script スコープの変数に入れておけば、その変数を使ってアクセスすることも可能です。
コントロールを作成する関数内にイベントハンドラースクリプトブロックを記述すれば、local スコープの変数でも見えるのかと思いましたが、そうではないようです。たとえば次のようなスクリプトで、イベントハンドラー($OnShowDialog1)の《記述場所》はコントロールを作成したスコープの内側だとしても、実行時にはそうではないといういうことなのでしょう、おそらく。
$script:checkBox1 = New-Object System.Windows.Forms.CheckBox
$script:checkBox2 = New-Object System.Windows.Forms.CheckBox
$OnShowDialog1 =
{
$checkBox1.Checked = $This.Tag.prop1
$checkBox1.Checked = $This.Tag.prop2
}
$FormSetting.Add_Shown($OnShowDialog1)
コメント 0