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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

解決済

2回答

3812閲覧

【visual C#.NET】一つのフォームから複数の同一フォームに同じ値を同期

asus2

総合スコア22

C#

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2018/12/07 02:42

編集2018/12/07 02:59

お世話になります。

一つのフォームから複数の同一フォームに対して、同じ値を同期したいと思っています。
具体的には下記のようなイメージです。(実際にやりたいことはまた別ですが…。)

イメージ説明

・一番左で複数選択して開く子フォームは同一のフォームを複数開きます。
・操作フォームは上記の同一フォームのいずれか一方の表示ボタンを押下することで表示されます。
・操作フォームのボタンを押下すると赤に対応する数値が上記で開かれたフォーム全てで同期。
・同期された値を元に表示内容を変更。

【親】一番左のリスト 【子】開かれた同一フォーム 【孫】操作フォーム

上記のイメージの中の
【操作フォームのボタンを押下すると赤に対応する数値が上記で開かれたフォーム全てで同期。】
がうまくいきません。

子フォームから操作フォームの値を読みに行くものを試してみたのですが
操作フォームを呼び出した子フォームからしか読みに行くことはできませんでした(あたりまえですね…。)

visual c#.NETについては始めて日が浅く
おかしなことを言っているかもしれません。
それも含めご指摘、良い方法をご教示いただけますと幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/12/07 03:15 編集

その「値」の型は具体的に何か質問に明記してください。それから「うまくいきません」と言われても分かりませんので、そのあたりも具体的に、どのようなことを期待して、そのようなことをしたが、どのようになってしまうかを書いていただきたく。
asus2

2018/12/07 03:44

値の型はint型です。【押下すると赤に対応する数値が上記で開かれたフォーム全てで同期】  うまくいきません【子フォームから操作フォームの値を読みに行くものを試してみたのですが 操作フォームを呼び出した子フォームからしか読みに行くことはできませんでした(あたりまえですね…。)】です。よろしくお願いします。
guest

回答2

0

「同期」でバインディングかとも思ったのですが、提示されたフローだと単に自身の子Formを開くときに値を渡せばよいのでは?

投稿2018/12/07 03:17

papinianus

総合スコア12705

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

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

asus2

2018/12/07 03:55

自身というのは親のことでしょうか 値は孫フォームから送られてきます。
papinianus

2018/12/07 04:14

質問を読み違ってました。子や孫が親や子を、知りたいのかと思ってました。 前段に書いたように、バインディングを利用して、同じモデルを更新するようにしたほうがいいみたいですね
asus2

2018/12/07 04:23

バインディングはまだ使用したことがありませんでした、調べて試してみたいと思います。 ご回答ありがとうございました。
papinianus

2018/12/07 04:24

いえ、混乱させて申し訳なかったです
guest

0

ベストアンサー

孫フォーム(操作フォーム)の赤ボタンをクリックすると、開いている子フォームに赤を反映させたい、ということでよろしいでしょうか?
あと、子フォームに赤を反映させる(上記イメージだと、図形が赤になる)ところは出来ていますか?
これが出来ている場合は、開いている子フォームを列挙して、各子フォームに色を反映していくことになりますが、開いているフォームのコレクションはApplication.OpenFormsで取得できます。
あとは、そのフォームが子フォームだった場合、その子フォームに用意した色反映メソッドを実行する、という感じでしょうか?

C#

1foreach(Form f in Application.OpenForms) 2{ 3 if (f.GetType() == typeof(子フォーム型)) 4 { 5 ((子フォーム型)f).SetColor(指定色); //SetColorは、子フォームに用意した色反映メソッド 6 //以下、必要処理があれば書く 7 } 8}

追記

ところで、任意の子フォームが開く時には、既に孫フォームは開いているのでしょうか?
もし孫フォームが開いていて、かつ、孫フォームのインスタンスが唯一であれば、子フォームを開くときのコンストラクタに孫フォームのインスタンスを渡すようにして、孫フォームの色指定ボタンのイベントを子フォームで検知する、という方法もあります。
(子フォームを開く際に、孫フォームが開いていない場合でも、孫フォームのインスタンスが唯一であることが保証されるのであれば、先に孫フォームのインスタンスを生成しておく、というのも一つの方法です。)
これであれば、「開いているフォームのうち、子フォームの場合は...」のようなことを行う必要もありません。

投稿2018/12/07 03:25

編集2018/12/07 03:50
kenshirou

総合スコア772

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

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

asus2

2018/12/07 03:54

>>孫フォーム(操作フォーム)の赤ボタンをクリックすると、開いている子フォームに赤を反映させたい、ということでよろしいでしょうか? はい、そうなります。 >>子フォームに赤を反映させる(上記イメージだと、図形が赤になる)ところは出来ていますか? はい、ここはできています。 今いただいたアドバイスを元に試行錯誤中です、少々お待ちください。
asus2

2018/12/07 04:18

うまくいきました!ありがとうございました。
asus2

2018/12/07 04:21

追記拝見しました、子フォームは子フォームが開いてから表示されますが、開いた後でも追加で開けます。 追加で教えていただいた方法も試してみたいと思います、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問