- PR -

別フォームへdataowの値を渡したい

投稿者投稿内容
ゆうじ
常連さん
会議室デビュー日: 2008/01/28
投稿数: 31
お住まい・勤務地: 東京都
投稿日時: 2008-02-16 00:14
度々申し訳ありませんがVB2005について教えてください。
@A/B2つのフォームがありAフォームで取得したdatarowを下記のコード
で記述しBフォームで値を取得したいのですがエラーが表示されます。
A値が渡せましたらCフォームDフォームでも同様の作業が発生しますので
クラス?関数?として登録をしたいのですがどの様に行えばよろしいでしょうか?

Aフォーム
Public Class Aフォーム
Public drow As DataRow
END CLASS

Bフォーム
DIM ABC AS DATAROW = Aフォーム.drow
DIM d AS INTEGER
Debug.WriteLine(ABC(2))
d = abc(2)

エラーメッセージ
オブジェクト参照がオブジェクト インスタンスに設定されていません。
と表示されます。
サイト等で調べたところ NEWキーワードを使用しインスタンスを作成
する等とありましたが訳がわかりません。

よろしくお願いします。
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2008-02-16 10:52
こんにちは。

引用:

ゆうじさんの書き込み (2008-02-16 00:14) より:

Aフォーム
Public Class Aフォーム
Public drow As DataRow
END CLASS

Bフォーム
DIM ABC AS DATAROW = Aフォーム.drow
DIM d AS INTEGER
Debug.WriteLine(ABC(2))
d = abc(2)

エラーメッセージ
オブジェクト参照がオブジェクト インスタンスに設定されていません。
と表示されます。



エラー自体は文字通り、BフォームのABCというDataRowオブジェクトにAフォームのdrowオブジェクトの参照が設定されていません。

で、どうすればいいのかという所ですが。
少し情報が足りないので補足をお願いします。
1.AフォームとBフォームの関係は?
2.AフォームとBフォームはどのように表示されている?
ゆうじ
常連さん
会議室デビュー日: 2008/01/28
投稿数: 31
お住まい・勤務地: 東京都
投稿日時: 2008-02-16 11:18
NAKAPサンありがとうございます。
Aフォームのコマンドボタンをクリック→Bフォームを開く
上記の流れになっております。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _        System.EventArgs) Handles Button1.Click
Dim f As New Bフォーム
Bフォーム.Show(Me)
End Sub
Aフォームのイベントが上記となります。
よろしくお願いします。
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2008-02-16 12:47
Aフォームで drow には何か値がセットされているのでしょうか?
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2008-02-16 13:13
引用:

ゆうじさんの書き込み (2008-02-16 11:18) より:
Aフォームのコマンドボタンをクリック→Bフォームを開く



であれば、AフォームからBフォームを開く時に、AフォームからBフォームにdrowの値を渡せばよいでしょう。
Cフォーム、Dフォームを開く時も同じことです。

現在はBフォームからAフォームのdrowを参照しようとしています。
そして、Bフォームで宣言しているAフォームはBフォームを開いているAフォームとは別物となっています。
ゆうじ
常連さん
会議室デビュー日: 2008/01/28
投稿数: 31
お住まい・勤務地: 東京都
投稿日時: 2008-02-16 14:29
よっしーサン
値はint型です。
nakapサン
ご回答ありがとうございます。
勉強になりました、ですが値の渡しかたが解りません。
Aフォーム側でどの様な記述すればよろしいのですか?
Aフォームから同様にCフォーム/Dフォームも開くのですが、
それぞれのコマンドボタンのイベントに記述が必要になるのでしょうか?

[ メッセージ編集済み 編集者: ゆうじ 編集日時 2008-02-16 14:34 ]
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2008-02-16 16:31
引用:

ゆうじさんの書き込み (2008-02-16 14:29) より:
よっしーサン
値はint型です。
nakapサン
ご回答ありがとうございます。
勉強になりました、ですが値の渡しかたが解りません。
Aフォーム側でどの様な記述すればよろしいのですか?
Aフォームから同様にCフォーム/Dフォームも開くのですが、
それぞれのコマンドボタンのイベントに記述が必要になるのでしょうか?

<font size=-1>[ メッセージ編集済み 編集者: ゆうじ 編集日時 2008-02-16 14:34 ]</font>



いくつか方法はあります。
感覚的に分かりやすいのはBフォームにユーザープロパティを追加する方法でしょうか。
コード:
Bフォーム:
Public Class BForm
	Private _drow As DataRow
	Public Property drow() As DataRow
		Get
			Return _drow
		End Get
		Set(ByVal value As DataRow)
			_drow = value
		End Set
	End Property
End Class

Aフォーム:
Public Class AForm
	Private drow As DataRow
	
	Private Sub Button1_Click(Byval sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		Dim f As New BForm
		f.drow = Me.drow
		f.Show()
	End Sub
End Class


ゆうじ
常連さん
会議室デビュー日: 2008/01/28
投稿数: 31
お住まい・勤務地: 東京都
投稿日時: 2008-02-16 18:40
NAKAPサマありがとうございます。
教えていただいた通りコードを記述し、Bフォームにて
Debug.WriteLine(drow(2))
と確認をしましたが、エラーが起こります。
値の取得方法がいまいちわかりません。よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)