|
.NET TIPS サブ・フォームからメイン・フォームのコントロールに値を設定するには?[C#、VB]デジタルアドバンテージ 遠藤 孝信2008/06/12 |
![]() |
|
|
|
Windowsアプリケーションでは、メイン・フォームから別のフォーム(サブ・フォーム)を開き、サブ・フォームでの入力結果をメイン・フォームに反映するといった処理が必要になる場合がある。以下はこのような処理を行うサンプル・プログラムの実行画面である。
![]() [Form2を開く]ボタンをクリック ![]() 文字を入力して[Form1に渡す]ボタンをクリック ![]() |
| 2つのフォームを使用したサンプル・プログラムの実行画面 |
| サブ・フォームで入力した文字列がメイン・フォームのラベルに表示される。 |
本稿ではこのような処理の基本的な実装方法についてまとめる。
サブ・フォームからメイン・フォームへの参照
サブ・フォームを扱ううえで、まずポイントとなるのは、サブ・フォームからメイン・フォームへの参照である。
メイン・フォーム内でサブ・フォームのインスタンスを作成するため、当然ながらメイン・フォームはサブ・フォームへの参照を持っているが、サブ・フォームからメイン・フォームのコントロールにアクセスするには、あらかじめメイン・フォームへの参照をサブ・フォームに渡しておかなければならない。
![]() |
| サブ・フォームからメイン・フォームへの参照 |
このような参照は、サブ・フォームを作成するときに呼び出すサブ・フォームのコンストラクタに、自分(=メイン・フォーム)への参照を引数として渡すようにすればよい。
なおVisual Basic 2005以降では、「既定のインスタンス」と呼ばれる機能があり、これを使えばサブ・フォームの明示的なインスタンス化(Newの実行)や、メイン・フォームへの参照の受け渡しは不要となる。
メイン・フォーム上のコントロールへのアクセス
もう1つのポイントとなるのが、メイン・フォーム上に配置されているコントロールへのアクセス方法であるが、これは「TIPS:Windowsフォーム上のコントロールを検索するには?」で解説している方法により、メイン・フォームのControlsプロパティから可能だ。
あるいはフォームのデザイン時に、対象となっているコントロールのModifiersプロパティを、「private」から「internal」に(VBの場合には「Private」から「Friend」に)変更する。このようにすれば、コントロールへの参照がセットされているメイン・フォームのフィールドに直接外部からアクセスすることができる。
Modifiersプロパティは、自動生成されるコード内のフィールドの宣言に使用されるアクセス修飾子を指定するためのもので、これがinternal/Friendであれば、同じアセンブリの別のクラスからでもアクセス可能となる。
なお、サブ・フォームからのアクセス用に、メイン・フォームのクラスにコントロール値設定用のプロパティを追加するという方法もよく利用される。これによりメイン・フォームでの具体的な実装もカプセル化できるが、上記の2つの方法と比べると若干手間がかかる。
サンプル・プログラムの作成
以上の方法を実装したサンプル・プログラムを次に示す。実行時の動作は冒頭で示したとおりだ。
まずは冒頭の最初の画面のように、メイン・フォームにはLabelコントロールとButtonコントロールを配置する。次に、プロジェクトにサブ・フォームとなるWindowsフォームを追加し、こちらにはTextBoxコントロールとButtonコントロールを配置する。
そしてメイン・フォームのボタンをダブルクリックし、次のようなClickイベント・ハンドラを記述する。Clickイベント・ハンドラ内では、this/Meはメイン・フォームのインスタンスを参照している。
| ||
| メイン・フォームのコード(上:C#、下:VB) | ||
| サブ・フォームのインスタンスを作成し、それをShowメソッドにより表示する。 |
一方、サブ・フォームのコンストラクタと、ボタンのClickイベント・ハンドラは次のようになる。
| ||
| サブ・フォームのコード(上:C#、下:VB) | ||
| コンストラクタで受け取ったメイン・フォームへの参照を使用して、メイン・フォーム上のラベルにテキストボックスで入力された文字列をセットする。 |
また、VBで「既定のインスタンス」を利用した場合には、2つのフォームのコードは次のように非常にシンプルになる。サブ・フォームを作成したり、サブ・フォームにメイン・フォームの参照を渡したりする必要はない。
| |
| メイン・フォームのコード(既定のインスタンス使用時) | |
| 「Form2」がサブ・フォームの既定のインスタンスを参照している。 |
| |
| サブ・フォームのコード(既定のインスタンス使用時) | |
| 「Form1」がメイン・フォームの既定のインスタンスを参照している。 |
「既定のインスタンス」では、フォームのクラス名(本稿の場合には「Form1」「Form2」)と同じ名前でフォームにアクセスできる。![]()
| カテゴリ:Windowsフォーム 処理対象:フォーム 使用ライブラリ:WebBrowserコントロール(System.Windows.Forms名前空間) 使用ライブラリ:HtmlDocumentクラス(System.Windows.Forms名前空間) 関連TIPS:Windowsフォーム上のコントロールを検索するには? |
|
||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -






