teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

回答したコードの動作原理の説明を追加

2020/06/08 12:55

投稿

reosablo
reosablo

スコア339

answer CHANGED
@@ -1,8 +1,12 @@
1
- `Add_Shown()`の行を次のように変えるとうまくいきました。
1
+ `.Add_Shown()`の行を次のように変えるとうまくいきました。
2
2
 
3
3
  ```powershell
4
4
  $form.Add_Shown({ $form.Activate(); $OKButton.Select(); })
5
5
  ```
6
6
 
7
- 公式情報が見つからないのですが、どうやら`Add_Shown()`メソッドスクリプトブロックを引数るメソッドようです。
8
- おそらく[Forms.Shownイベント](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.shown)が発火したときに呼び出す処理を追加するためのものではないかと思います。
7
+ PowerShellコントロール(GUIコンポーネント)にイベントハンドラを追加るには`Add_イベント名()`メソッドを使用します。スクリプトブロックを引数に渡ことで、イベント発火時にその内容を呼び出すことがきます。[(公式Wiki)](https://social.technet.microsoft.com/wiki/contents/articles/25911.how-to-add-a-powershell-gui-event-handler-part-1.aspx)
8
+
9
+ フォームをアクティブにするためのメソッド`.Activate()`は[公式ドキュメント](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.activate)によると呼び出しに必須条件があります。
10
+ > このメソッドが効果を持つようにするには、フォームが表示されている必要があります。
11
+
12
+ [Shownイベント](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.shown)が発火するのはフォームが表示されたあとのようなので、`.Add_Shown()`メソッドを使って`.Activate()`の呼び出しをフォームの表示後に遅らせることにより`.Activate()`の呼び出しの条件を満たすことができます。