■87769 |
Re[3]: 別フォームにデータを渡したい |
□投稿者/ にゃるら -(2018/06/29(Fri) 09:55:24)
| ■No87764 (いまそかり さん) に返信 > Dim fType As Type = Form1.GetType() > > Dim f2 As New Form2() > > fType.InvokeMember("Form1_Load", > BindingFlags.NonPublic Or > BindingFlags.Instance Or > BindingFlags.InvokeMethod, > Nothing, > From1, > New Object() {Form1, f2} > ) > > > 参考(https://dobon.net/vb/dotnet/programing/invokenonpublicmember.html > 「隠蔽されている非パブリックメンバを呼び出す」) > > これで合ってますかね…?
4つめの引数のFrom1がForm1クラスのインスタンスであればこれでよいと思います。
あと補足でNew Object()の部分は、Form1_Loadの引数になって渡す値ですね。
Form1_Loadの1つ目の引数はsender、これはForm1_Loadメソッドを備えている Form1のインスタンスを渡してあげる方がよいですね。
2つ目の引数はe、Loadイベントを呼んだ補足情報となるEventArgs型の値です。 特に使うことがないときは、私はEventArgs.Empty(staticなメンバ)を渡してあげます。 何に使うの?っていうと、たとえばですけども、 ClosingイベントだとCancelEventArgsっていう型になっていて、フォームを閉じようとした ときに、「やっぱり閉じるのやめるわ」ってことがCancelEventArgsのCancelプロパティに falseを設定することで実現できたりします。 マウスを動かしているときのMouseMoveイベントだとMouseEventArgsg型で、座標の値(x, y)が取れたりします。 > また、以前「基本はPublicではなくPrivateで書いたほうがいい」と授業で習った覚えがあったので、 > Privateで記述していました。
そうですね、その習ったことが間違いとは思いません。 教えられたことを素直に実践するのはとても良いことだと思います。 とはいえ、まずはプログラムは動いてなんぼ。 動く->適切な設定 の順で試される方が良いと思います。(動いた方が楽しいし!)
> でも、まずはにゃるらさんの言う通りPublicでやった方がやりやすいかもですね…。 > 次回からはその方法も試してみます。
時間がもしあるなら、色々試してみてね。 ちなみに僕が回答したリフレクションを使って解決するのは、今回の課題の要件でいけば「適切でない方法」「間違った方法」です。 他の方からの意見は「適切な方法」「正しい方法」です。 いじわるしたわけではないですが、やろとする方法で動くようにすることを提案したまでです。
適切な方法、適切でない方法、正しい方法、間違った方法、どれも「自分で試す」ことが大事だと思います。
出来ればこれからもプログラミングを楽しいと思ってもらえたら幸いです。 でわでわ。 |
|