SSブログ
QLOOKアクセス解析

PowerGUI での Read-Host の戻り値の問題 [PowerShell]

$myInvocation の値が正しく設定されていない以外に、
PowerGUI に問題点がもうひとつありました。

PowerGUI で Read-Host が実行されると普通のコンソールのようにコマンドラインで値を受け付けるのではなく、ダイアログボックスが出てきて入力をうながします。
ここで入力欄に値をなにも入れずにそのままOKをクリックすると戻り値が $null になってしまいます。
普通にコンソールで実行している際には $null ではなく長さ0の文字列が帰ってきます。
したがって
$str1 = 'abcde'
$userinput = Read-Host '[' $str1 ']'
if ($userinput -eq '')
{
    $input = $userinput
}
のような判定ではうまく動かなくなってしまい $null かどうかの判定も付け加えなくてはいけません。

どちらの問題も
http://powergui.org/
の Discussion で話題に出てはいるけれど、まだ直っていないようです。

[Winform] フォーム上のコントロールへのアクセス [PowerShell]

Winformで、フォーム上に配置されたコントロールは、
フォームの Controls プロパティ(Control.ControlCollection)に格納されています。
この中の目的のコントロールに名前を指定してアクセスするために PowerShell では次のように書きます。
コントロール名を連想配列のキーとして扱うような記述方法ですね。
(フォーム $this の中の tableLayoutPanelBase という名前(Name プロパティ値)を持つ
コントロールを変数 panel に格納する例です。)
$panel = $this.Controls['tableLayoutPanelBase']
入れ子になったパネルの上のコントロールへのアクセスは次のように続けて書くこともできます。長いですけど。
$checkBoxMonitor =
$this.Controls['tableLayoutPanelBase'].Controls['tableLayoutPanelData'].
Controls['checkBoxMonitor']
Controls の要素には、名前ではなく配列のインデックス番号で Controls[0] のようにしてアクセスすることも可能です。
また、たとえばイベントハンドラー(関数やスクリプトブロック)からアクセスしたいようなコントロールは、フォームから順にたどってアクセスするのではなく、作成時などに 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)

人気ブログランキングへ
 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。