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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.87765 の関連記事表示

<< 0 >>
■87765  Re[3]: 別フォームにデータを渡したい
□投稿者/ いまそかり -(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)のところで
    「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」
    という例外が発生してしまいます。
    
    これも色々と調べてはみたのですが、よく分からず…。
    すみませんが、引き続きご教授頂けますとありがたいです。
    (タイトル違いでしたら新しいスレッド立てます)
    
記事No.87756 のレス /過去ログ151より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -