質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

1571閲覧

モーダルおよびモードレスウィンドウの制御

dotkind

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/11/14 03:46

編集2018/11/14 06:44

c#でWindows Form Applicationを作成しています。

複数のフォームを表示させて、同時にコントロールしたいと考えております。

以下のコードで、ボタン1のクリックイベントを発生させた後に、ボタン2のクリックインベントを発生させます。
このとき、ボタン2のイベントで表示されたfm3ウィンドウを表示した状態で、既に表示済みのfm2ウィンドウをユーザーが操作するためには、どの様にすればいいでしょうか?

fm2/fm3のOwnerプロパティを色々変更してみたのですが、所望の挙動が得られません。

c#

1public partial class Form1 : Form 2{ 3 Form2 fm2 = new Form2(); 4 Form3 fm3 = new Form3(); 5 6 public Form1() 7 { 8 InitializeComponent(); 9 } 10 11 /// <summary> 12 /// ボタン1のクリックイベント 13 /// </summary> 14 private void button1_Click(object sender, EventArgs e) 15 { 16 fm2.Show(this); 17 } 18 19 /// <summary> 20 /// ボタン2のクリックイベント 21 /// </summary> 22 private void button2_Click(object sender, EventArgs e) 23 { 24 //fm3表示中もfm2が表示されている場合には操作したい 25 fm3.ShowDialog(this); 26 } 27}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

モーダルダイアログは閉じるまでメソッドから帰ってこないのでモーダルダイアログが開いている時には他のダイアログを操作することができないはずです。
ですので、複数のダイアログを表示して操作したい場合にはモードレスダイアログを使用することがいいと思われます。

投稿2018/11/14 04:27

Loky

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2018/11/14 04:44

ユーザーがForm2を操作するというのであれば、仰るとおりだと思いますが、 Form3からForm2を操作するということなので、操作(メソッドの呼び出しなど)は行えるのではないでしょうか? 質問者さんの言われる「操作」がどのようのものかは分かりませんが・・・
Loky

2018/11/14 05:21

確かにForm3からForm2だけであればインスタンスを渡して操作を行うことは可能だと思います。 このソースを見てForm1からForm2とForm3を呼び出した上でForm3からForm2へ移行してユーザーが操作するものだと思っておりました故、このような回答とさせて頂きました。
dotkind

2018/11/14 06:46

曖昧な質問になっており申し訳けございません。質問文を加筆修正いたしました。 ユーザーがForm3を表示した状態で、Form2も操作できればと考えております。
YAmaGNZ

2018/11/14 06:56

そういう意味でしたら、モーダル表示をやめるしかありません。
guest

0

Form3にForm2のインスタンスを渡すプロパティを実装すればいいのではないでしょうか?

投稿2018/11/14 04:05

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

fm3.ShowDialog(this,fm2);
とできるようにShowDialogメソッドを実装、そこから操作すればいいかと

投稿2018/11/14 04:34

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問