- ベストアンサー
VB2005のMDIについて
はじめまして。現在、VB2005で開発しております。 MDIの操作で判らないところがありますので、ご存知の方がいましたら、教えてください。 MDIで開発しております。親フォームで発生したイベント内で子フォームに対してコントロール操作(画面を操作する関数を実行)を行うのですが、画面は全く動作しません。 ※デバックで確認するとコントロール操作しております。 対象の子フォームは必ず表示されていますが、必ずしも最前面にはいません。 今回のように親フォームから子フォームのメソッドを実行する際に動作する方法を教えてください。それとも、操作することは不可なのでしょうか。宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>Call frmChild.子フォームの関数 VB6ではフォーム間のコントロール操作ができましたが、VB.NETではできません。Invokeメソッドを使用します。 参考URLでは、スレッドからフォームのコントロールを操作する解説ですが、フォームから他のフォームのコントロールを操作する場合も同じです。
その他の回答 (1)
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
画面を操作する関数 とありますが具体的にどのような動作でしょうか? 可能であればその部分のコードを提示していただけると的確なアドバイスがもらえると思います。 推測ですが、子フォームのインスタンス関連かな、と思いました。 ChildFormというフォームがあり、フォームを表示する時は Dim frmChild As New ChildForm frmChild.Show() としておいて、メソッドにアクセスする時は ChildForm.Method() みたいにしているのではないかな・・・と。
補足
今回作成しているプログラムは親フォームから起動時に すべての子フォームを呼び出しております。(子フォームは複数あり) Public frmChild As New ChildForm ← 別の所で定義(別画面からでも呼び出せるように) frmChild.MdiParent = Me frmChild.Show() その後、親フォームでデータ受信イベントが発生した時にデータを データベースに登録し、子フォームのDataGridViewに対して登録したデータを表示させたいと思っております。 ※データベース処理は省略します。 親フォームから呼び出すときには Call frmChild.子フォームの関数 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 子フォームの関数はDataGridViewに対して、 リストクリア DataGridView.Rows.Clear() データ追加 DataGridView.Rows.Add(・・・) を行っております。 デバックするとこの関数は呼び出せておりますし、動作(値の取得や追加)は行えております。ただ、一覧には反映されません。 ※この処理をコントロール操作(画面を操作する関数を実行)と記載しました。 ※子フォーム上では同じ関数を呼び出し、正しく動作していることを確認しております。 今回の場合、どのようにしたら親フォームから子フォームを操作できるか教えてください。お願いします。
お礼
nishito24さん、Wizard_Zeroさん 回答いただきありがとうございました。 nishito24から参考URLをじっくり読み、作成APLに導入した所動作を確認することができました。 ありがとうございました。
補足
回答ありがとうございます。 参考URLを確認させていただきました。 私自身まだまだ未熟でInvokeメソッドを使用する方法が理解できませんでした。 もし、よろしければフォームから他フォームのコントロール操作する方法をサンプルなどで教えていただけないでしょうか? 宜しくお願いします。