C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: データの受け渡し


(過去ログ 10 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■1981 / inTopicNo.1)  データの受け渡し
  
□投稿者/ ぺけ (17回)-(2007/03/12(Mon) 12:29:14)

分類:[VB.NET (Windows)] 

いつもお世話になっております。
フォーム間でのデータの受け渡しについてお聞きしたい事があります。

まずMainフォームとSubフォームがあります。
Subフォームは、Mainフォームより受け渡される検索条件を元に
データの検索を行い、検索結果をMainフォームへ返却してあげるフォーム
です。

@MainフォームよりSubフォームに検索条件を渡す。
ASubフォームはMainフォームより受け取った検索条件を元に
 データを検索し、(例えばグリッドなどに検索結果を表示し、
 グリッドで選択したデータ(1件)をMainフォームに返却する。
BSubフォームより受け取った検索結果のデータを画面の項目に
 設定する。

このようなデータの受け渡しを行う場合、どのような受け渡し方法
が望ましいのでしょうか?

宜しく御願い致します。

環境:WindowsXP、VB2005


引用返信 編集キー/
■1983 / inTopicNo.2)  Re[1]: データの受け渡し
□投稿者/ Hirotow (69回)-(2007/03/12(Mon) 12:51:12)
Hirotow さんの Web サイト
組み込みのダイアログのようにSubFormをダイアログ表示し、
DialogResultの値に応じて公開プロパティから値を取得するのが正攻法だと思われます。

引用返信 編集キー/
■1984 / inTopicNo.3)  Re[1]: データの受け渡し
□投稿者/ M.K (8回)-(2007/03/12(Mon) 12:58:04)
No1981 (ぺけ さん) に返信

> このようなデータの受け渡しを行う場合、どのような受け渡し方法
> が望ましいのでしょうか?

私は VB.NET を使用したことが無いので、具体的なコード例を提示する
ことは出来ないので、考え方だけ返信させていただきます。


まずVB.NETにクラス(構造体でも可)と言う概念が有るのでしたら、検索
条件クラスをMainフォームやSubフォームとは分けて作ります。

次に検索結果についても同様に、1行分のデータを格納しておくクラス
を作成し、その検索結果クラスを格納する可変長の配列を作ります。

最後にSubフォーム側に検索メソッド(関数)を定義し、メソッドの引数
に検索条件クラスと検索結果クラス配列を渡すような事をします。
※ 検索結果クラス配列は参照渡し(ref)としてあげる必要が有ります。

Subフォーム側の検索メソッドでは、引数の検索条件を元に検索処理を
行い、その結果を結果クラスの配列にガシガシと格納して処理終了と
すれば良いかと思います。


あくまで1つのやり方ですので、ご参考になれば幸いです。
引用返信 編集キー/
■1986 / inTopicNo.4)  Re[1]: データの受け渡し
□投稿者/ はつね (105回)-(2007/03/12(Mon) 14:17:41)
はつね さんの Web サイト
No1981 (ぺけ さん) に返信
> @MainフォームよりSubフォームに検索条件を渡す。
> ASubフォームはMainフォームより受け取った検索条件を元に
>  データを検索し、(例えばグリッドなどに検索結果を表示し、
>  グリッドで選択したデータ(1件)をMainフォームに返却する。
> BSubフォームより受け取った検索結果のデータを画面の項目に
>  設定する。
>
> このようなデータの受け渡しを行う場合、どのような受け渡し方法
> が望ましいのでしょうか?

これ、FAQともいえる質問ですね。

(1)Subフォームに検索条件をReadOnlyプロパティで実装(条件が多いようならば構造体とかも考慮)
(2)MainフォームからSubフォームをインスタンシング
(3)Mainフォームから(1)のプロパティに値を設定
(4)MainフォームからSubフォームをShowDialog
(5)SubフォームはMainフォームより受け取った検索条件を元にデータを検索
(6)Subフォームでは選択した1行をプロパティ用の変数に設定(条件が多いようならば構造体とかも考慮)
(7)Mainフォームでは(6)のプロパティより値を取得して画面の項目に設定
(8)(2)でNewしたものを破棄(Using〜End UsingでもOK)

引用返信 編集キー/
■1987 / inTopicNo.5)  Re[2]: データの受け渡し
□投稿者/ ぺけ (18回)-(2007/03/12(Mon) 16:48:11)
返信有難う御座います。

> 組み込みのダイアログのようにSubFormをダイアログ表示し、
> DialogResultの値に応じて公開プロパティから値を取得するのが正攻法だと思われます。

まだ経験が浅く、お答え頂いた事への理解度が足りずに申し訳ないのですが、
DialogResultの値に応じてとの事ですが、ShowDialogの戻り値を見て公開
プロパティより取得すると言った事がいまいち分かりませんでした。
DialogResultの値を見る必要を教えていただけると幸いです。

> Subフォーム側の検索メソッドでは、引数の検索条件を元に検索処理を
> 行い、その結果を結果クラスの配列にガシガシと格納して処理終了と
> すれば良いかと思います。
> あくまで1つのやり方ですので、ご参考になれば幸いです。

有難う御座います。教えて頂いた方法も参考に試してみたいと思います。

> これ、FAQともいえる質問ですね。
すみません。FAQとも言えると言われた意味が良く分かりません。
何か質問の仕方がおかしかったのでしょうか?

> 1)Subフォームに検索条件をReadOnlyプロパティで実装(条件が多いようならば構造体とかも考慮)
> (2)MainフォームからSubフォームをインスタンシング
> (3)Mainフォームから(1)のプロパティに値を設定
> (4)MainフォームからSubフォームをShowDialog
> (5)SubフォームはMainフォームより受け取った検索条件を元にデータを検索
> (6)Subフォームでは選択した1行をプロパティ用の変数に設定(条件が多いようならば構造体とかも考慮)
> (7)Mainフォームでは(6)のプロパティより値を取得して画面の項目に設定
> (8)(2)でNewしたものを破棄(Using〜End UsingでもOK)
分かりやすく順序で教えていただき有難う御座います。
教えて頂いた方法でも試してみたいと思います。



ちなみに、フォーム間でのデータの受け渡しにはイベントを使用するのが望ましいと
言う書き込みを拝見した事があるのですが、今回ご教授して頂いた解決方法には
イベントを使用する方法がありませんでした。イベントを使用する方法はあまり
望ましくないのでしょうか?



引用返信 編集キー/
■1991 / inTopicNo.6)  Re[3]: データの受け渡し
□投稿者/ Kazuki (3回)-(2007/03/12(Mon) 21:11:43)
No1987 (ぺけ さん) に返信
> DialogResultの値に応じてとの事ですが、ShowDialogの戻り値を見て公開
> プロパティより取得すると言った事がいまいち分かりませんでした。
> DialogResultの値を見る必要を教えていただけると幸いです。
DialogResultの値を見る必要性と解釈しました。
Cancelボタンとかを押された時に、処理をキャンセルしたいという要件の時に
DialogResult(ダイアログでどのボタンが押されたか)を見る必要があります

if (dialog.DialogResult == OKボタン?) {
なにやら処理();
}

> 何か質問の仕方がおかしかったのでしょうか?
この手の掲示板でよく見る質問だからだと思います。


> ちなみに、フォーム間でのデータの受け渡しにはイベントを使用するのが望ましいと
> 言う書き込みを拝見した事があるのですが、今回ご教授して頂いた解決方法には
> イベントを使用する方法がありませんでした。イベントを使用する方法はあまり
> 望ましくないのでしょうか?
ケースバイケースです。
今回みたいなモーダルなダイアログの時は別にイベントじゃなくてもいいと思います。
ShowDialogを呼ぶとOKとかCancelボタンが押されるまで親画面の処理が待たれますので。
引用返信 編集キー/
■1992 / inTopicNo.7)  Re[4]: データの受け渡し
□投稿者/ Kazuki (4回)-(2007/03/12(Mon) 21:13:49)
> if (dialog.DialogResult == OKボタン?) {
> なにやら処理();
> }
うぅ間違えたorz
If (f.ShowDialog(Me) = DialogResult.OK) Then
 なにやら処理()
End If

引用返信 編集キー/
■1996 / inTopicNo.8)  Re[3]: データの受け渡し
□投稿者/ はつね (106回)-(2007/03/12(Mon) 22:29:16)
はつね さんの Web サイト
2007/03/12(Mon) 22:31:37 編集(投稿者)

No1987 (ぺけ さん) に返信
>>これ、FAQともいえる質問ですね。
> すみません。FAQとも言えると言われた意味が良く分かりません。
> 何か質問の仕方がおかしかったのでしょうか?

良くある質問って事です。複数のフォームを使ったときにつまずく王道なのかなーという感想ですね。
なお、ここの掲示板に何度かフォーム間の値の受け渡しに関する質疑応答がのってますし、わんくまblogにも方法を記載してくれている人もいます。


> ちなみに、フォーム間でのデータの受け渡しにはイベントを使用するのが望ましいと

他の方もかかれていますが、フォームをShowDialogで呼び出すかShowで呼び出すかにより左右されるものであり、すべてのケースで必ずそうしなければならないというわけではありません。
引用返信 編集キー/
■1999 / inTopicNo.9)  Re[4]: データの受け渡し
□投稿者/ ぺけ (19回)-(2007/03/13(Tue) 00:39:47)
皆さん本当に有難う御座います。
まず、値を保持するクラスを用意するケースを
試してみました。次はDialogResultを使用した
ケースを試したいと思います。
フォームに関する値の受け渡しは、つまずく王道
なんですね・・。頑張って色々なケースを身に付けたいと
思います。
本当に有難う御座いました。
また何かありましたら宜しくお願い致します。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -