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

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

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

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

Q&A

解決済

1回答

4931閲覧

親ウィンドウにイベントが起こったら子ウィンドウのメソッドも実行するには

marvel

総合スコア13

C#

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

0グッド

0クリップ

投稿2018/09/17 14:58

親ウィンドウにあるボタンを押したときなにかの処理をしたあとに、子ウィンドウにある、子ウィンドウの内容を変更するメソッドを実行したいです。

ネットを調べても子ウィンドウのイベントを親に伝えるものしか見つけられませんでした。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

親ウインドウが子ウインドウのインスタンスを保持していると思いますので
子ウインドウにpublicなメソッドを用意して呼び出せばいいのでは?

追記

下記コードで試してみました。

  • 親フォーム

フォームデザイナでTextBox1つとボタン1つ、DockPanelを配置しました。
DockPanelのStyleはDockingWindowとしました。

C#

1 public partial class ParentForm : Form 2 { 3 private ChildForm childForm1; 4 private ChildForm childForm2; 5 6 public ParentForm() 7 { 8 InitializeComponent(); 9 10 childForm1 = new ChildForm("左側"); 11 childForm1.Show(dockPanel1,WeifenLuo.WinFormsUI.Docking.DockState.DockLeft); 12 13 childForm2 = new ChildForm("右側(自動)"); 14 childForm2.Show(dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockRightAutoHide); 15 } 16 17 private void button1_Click(object sender, EventArgs e) 18 { 19 childForm1.ViewMessage(textBox1.Text); 20 } 21 22 } 23
  • 子フォーム

C#

1 public partial class ChildForm : WeifenLuo.WinFormsUI.Docking.DockContent 2 { 3 public ChildForm(string title) 4 { 5 InitializeComponent(); 6 7 this.Text = title; 8 } 9 10 public void ViewMessage(string message) 11 { 12 MessageBox.Show(message); 13 } 14 } 15

投稿2018/09/17 15:05

編集2018/09/19 01:01
YAmaGNZ

総合スコア10222

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

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

marvel

2018/09/18 13:59

回答ありがとうございます。 DockPanel Suite を使った子ウィンドウであることをお伝えしていませんでした。すみません。 public にしても 'DockContent' に 'メソッド' の定義が含まれておらず、型 'DockContent' の最初の引数を受け付けるアクセス可能な拡張メソッド 'メソッド' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないかを確認してください。 とエラーが出てしまいます。 DockPanel Suite がFromを継承したものなので大丈夫かと思っていたのですが何か考慮しないといけないのでしょうか。
YAmaGNZ

2018/09/18 15:39

DockPanel Suiteを使っていたとしても public partial class ChildForm : WeifenLuo.WinFormsUI.Docking.DockContent { public void Test() { // 何か処理 } } で親からTestメソッドを呼べばいいのでは?
marvel

2018/09/18 16:13 編集

子フォームは確かにそのようになっています。 普通のフォームだったら呼び出せたので、DockPanel Suiteが原因で正しく動作しないのかと思いました。 普通のフォームクラスで行うため違うクラス・メソッドを用意して検証したので、もしかしたら違う部分があるかもしれないのでよく見てみます
YAmaGNZ

2018/09/18 22:39

上記されているエラーが出る実際に呼んでいる親フォームの部分、子フォームの実装部分のソースをミニマムコードで提示されるのがいいかもしれません
marvel

2018/09/19 13:55 編集

態々コードの追加までありがとうございます。 new するときのクラスが Form のクラスではなくDockContent になっていたことが原因でした。 なぜDockContentのままで動いていたのか不思議に思いましたが、もうあまり考えないことにします 初歩的なことですみません。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問