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

わんくま同盟

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

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


■87765 / )  Re[3]: 別フォームにデータを渡したい
□投稿者/ いまそかり (4回)-(2018/06/28(Thu) 18:05:42)
■No87759 (魔界の仮面弁士 さん) に返信
■No87758 (WebSurfer さん) に返信

魔界の仮面弁士さん、WebSurferさん、回答ありがとうございます。


>>Form2 のコンストラクタにデータを渡すための引数を持つものを追加し、frm = New Form2 のところで
>>そのコンストラクタを使って frm = New Form2(データ) というようにしてはいかがですか?

> ただし注意点として、
>  (1) 引数付きコンストラクタだけでなく、引数なしコンストラクタもオーバーロードで残すこと。
>  (2) コンストラクタ内では、最初に InitializeCompoent() を呼び出すこと。
> を忘れずに。



基からデータを渡すための引数を設定…思いつきませんでした。
書きやすそうだったので、上記のご意見を踏まえて書き直してみました。
※追加したコードは***で囲ってあります。



<修正後ソースコード>

【Form1】
Public class Form1 

***********************
*	
*	'Form2のコンストラクタにデータを渡すための引数を入れる変数
*	Dim df As DataSet
*
***********************



	'xmlからデータを取得
	Function xmlGet(Byval a As String,Byval b As String)

		'xmlへのパスやLoadなど(省略)

		 	  ・
			  ・
			  ・
			  ・

	End Function


	'フォーム内での動き
	Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

		'DBに接続するための情報をxmlから取得
		Dim id As String = xmlGet("a","b_id") 
		Dim pass As String = xmlGet("a","b_pass")

 
		'接続文字列の指定やSQL文の設定、接続、DBからレコード取得(省略)
			
					 ・
					 ・
					 ・
					 ・

	End Sub


***********************
*
*	'ボタンクリックイベント(Form2が開く)
*	Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
*       
*		Dim frm As Form2
*        	frm = New Form2(df) 
*        	frm.Show()  '(※1)
*
*	End Sub
*
***********************


End class	



【Form2】

Public Class Form2


***********************
*
*	Private df As DataSet
*
*
*	'Form2のオーバーロード(引数あり)
*	Public Sub New()
*
*        	InitializeComponent()
*
*	End Sub
*
*
*	'Form2のオーバーロード(引数あり)
*	Public Sub New(df As DataSet)
*              IntializeComponent()
*        	Me.df = df
*	End Sub
*
***********************


	'ここでDBから取得した値をコンボボックスに入れる
	Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
		

***********************
*
*	'Form1_Loadの呼び出し
*	Dim fType As Type = Form.GetType()
*
*      Dim f2 As New Form()
*
*      fType.InvokeMember("Form1_Load",
*                         BindingFlags.NonPublic Or
*                         BindingFlags.Instance Or
*                         BindingFlags.InvokeMethod,
*                         Nothing,
*                         Form1,
*                         New Object() {Form1, f2}
*                         )
*
*
*		'コンボボックスにDB内のテーブルを連結
*		'ここでdf使ってます
*
***********************

            	'コンボボックスに表示したいデータ
   	        '実際に扱うデータをSelectValueで取得する
      	    	
	End Sub

End class






上手く書くことが出来ました!
しかし、エラーもなかったので実行してみると、ソースコードの(※1)のところで
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」
という例外が発生してしまいます。

これも色々と調べてはみたのですが、よく分からず…。
すみませんが、引き続きご教授頂けますとありがたいです。
(タイトル違いでしたら新しいスレッド立てます)

返信 編集キー/


管理者用

- Child Tree -