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

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

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

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

21434閲覧

別フォームの操作について

jjjssskkk

総合スコア13

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/12/07 02:21

###前提・実現したいこと
お世話になります。
VB.NETを使ってフォームから別フォームの操作をしたいのですが、調べていてもイマイチ理解ができず、困っています。

フォームA(データ表示画面)のボタン1をクリックするとフォームB(設定画面)がモーダレスで開き、ボタン2(反映ボタン)をクリック、またはフォームBを閉じたときにフォームAの情報を更新するような操作をしたいと思っています。

Delegateを使うことを想定しているのですが、今まで使ったことがなく、調べても似たようなサンプルがなかなか見つからず行き詰っています。

基本的な部分だけでも良いので考え方やコードの書き方などご教授いただけませんでしょうか。よろしくお願いいたします。

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2012を使用しています。
そのほか必要な情報などございましたらご指摘お願いします。

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

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

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

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

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

KIYOSHI

2016/12/07 06:04

今どのようなコードを試して、どの部分がわからない(動かない)のか、追記してもらえると回答しやすいです。
guest

回答1

0

ベストアンサー

Form2 が Form1(のインスタンス)を知ってさえいれば、Form1 に対して影響を及ぼせますよ。

つまり、Form2 に呼び出し元である Formを表すメンバを(publicで)定義してやって、Form1 が Form2 を作った時にそこに自身をセットしてやってから Show してやる、でいいのです。

更新する際は Form1 側に public で設定を更新するためのメソッドを用意してやっておいて、Form2 側でそのメソッドを呼び出す(適用するとき、あるいは OK で終了するとき)ことで、設定データの管理・操作そのものは Form1 に任せておく方が安全でしょうね。

投稿2016/12/07 02:32

tacsheaven

総合スコア13703

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

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

jjjssskkk

2016/12/07 05:01

ご回答いただきありがとうございます。 情報が不足していて申し訳なかったのですが、現在システムとしては、 Form2(設定画面)で設定を保存→設定ファイルに保存→Form2終了時(または反映ボタン押下時)にForm1より設定ファイルを読込み→設定データの反映、データをもとにグラフ作成 のような流れになっています。 ご回答いただいた方法も試してみたのですが、設定データファイルの操作やグラフ作成操作をするためのクラスが多く、Form2側からForm1のメソッドを呼び出す形ですと全てのクラスをNewしなおす必要があり、難しいところがあります… ですのでできればDelegateを使ったマルチスレッド動作で動かしたいとは思っておりました。 (私の解釈が違うようでしたらご指摘ください) ですがいただいたご回答はとても参考になりました。ありがとうございます。
tacsheaven

2016/12/07 05:06

Form1側で「Form2で設定が変更されたときにやるべき処理を書いたメソッド」を用意してやって、それを Form2 から呼び出してもらえば、という話なのですが、なぜに全クラスを New しなおす必要があるのでしょう。 Form1 の当該メソッドは、「呼び出されたら設定ファイルを読み込み、設定データを反映する」だけになるはずですよ?
jjjssskkk

2016/12/07 05:38

コメントありがとうございます。Form1に書いた設定更新のメソッドでインスタンスエラーがでてしまうので私の記述が間違っているような気がします。申し訳ありません… 「Form1 が Form2 を作った時にそこに自身をセットしてやってから Show してやる」という部分ですが、もう少し具体的に教えていただけませんでしょうか?
tacsheaven

2016/12/07 06:13

Form2 側 Public Class Form2 Public mForm1 As Form1 ... Form1側 Dim f As New Form2() f.mForm1 = Me f.Show() という感じになります。Form2 側では必要な時に Form1 側のpublic なものを、mForm1.??? の形で利用するわけです。
jjjssskkk

2016/12/07 07:46

丁寧にご回答いただきありがとうございます。 初歩的なミスでお恥ずかしいのですが、 f.mForm1 = Me の部分が抜けていたようで、修正しうまく動きました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問