- 題名: フォームとタスクバーの関係について
- 日時: 2010/11/17 9:47:41
- ID: 27584
- この記事の返信元:
- (なし)
- この記事への返信:
- [27589] Re[1]: フォームとタスクバーの関係について2010/11/17 10:55:27
- ツリーを表示
■No27584に返信(まとぱぱさんの記事) > 動作として FormB を表示しても ShowDialog で表示したフォームをアクティブにしたいのですが 実験してみました。VB6 で同じ処理を行うと、 ・タスクバーで FormMain を選択すると、FormC がアクティブになる。 ・タスクバーで FormA を選択すると、FormC がアクティブになる。 ・タスクバーで FormB を選択すると、FormB が一瞬アクティブになるものの、 すぐに FormC がアクティブになる。 という状態になりましたが、.NET の場合は、 ・タスクバーで FormMain を選択すると、FormC がアクティブになる。 ・タスクバーで FormA を選択すると、FormA がアクティブになるが、 その後で FormA を操作しようとすると、FormC がアクティブになる。 ・タスクバーで FormB を選択すると、FormB がアクティブになり、操作できない。 となりますね。 VB6 の時は、ランタイム側で何かしているのかな…。 > 問題を解決する良い方法が見つかりません。 VB6 互換の動作を行う拡張メソッドを用意してみました。 // 利用方法 using (Form FormC = new Form() { Text = "FormC" }) { // FormC.ShowDialog(FormA); FormC.ShowDialogEx(FormA); } // 拡張メソッドの定義 public static class VB6Compatible { public static DialogResult ShowDialogEx(this Form target, IWin32Window owner) { EventHandler act = delegate { target.Activate(); }; foreach (Form f in Application.OpenForms) f.Activated += act; DialogResult result = target.ShowDialog(owner); foreach (Form f in Application.OpenForms) f.Activated -= act; return result; } public static DialogResult ShowDialogEx(this Form target) { return ShowDialogEx(target, null); } }
分類:[.NET]
こんにちわ。
複数のフォームをShowで開いて、
開いたフォームからShowDialogで新しいフォームを開いた時
タスクバーでフォームを切り替えるとアクティブになるが操作できない。
例
1.FormMain から FormA と FormB を Show(this) で表示
2.FormA から FormC を ShowDialog(this) で表示
3.タスクバーで FormB を表示するとアクティブになるが操作できません
動作として FormB を表示しても ShowDialog で表示したフォームをアクティブにしたいのですが
問題を解決する良い方法が見つかりません。
ご教授お願いします。