■ フォーム間で値の受け渡しを行うには??

[Visual Basic 初心者掲示板] [過去ログの一覧]


ぼず 2008/02/06(水) 16:50:17 <初心者>
Visual Studio 2003で開発を行っています。
データベースを表示させたDataGridのセルをクリックすることでセル内の値を取得。
取得した値で検索を行い、その結果を別フォームのLabelに表示させたいのですが、いき詰まってしまいました。

現在は、DataGridのセルをクリックしてセル内の値を取得することはできましたが別のフォームへ値を渡す方法がわかりません。


以下FORM1でDataGridのセルをクリックした際の処理です

 Private Sub DataGrid1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp

        Dim c As DataGridCell = DataGrid1.CurrentCell
        Dim confirm As New confirm

    'クリックされたセルの値を取得します。
        Dim rno As Integer = c.RowNumber
        Dim cno As Integer = c.ColumnNumber

        If cno = 0 Then
            confirm.start = DataGrid1(rno, cno)
            confirm.plan = DataGrid1(rno, cno + 1)
            confirm.important = DataGrid1(rno, cno + 2)
            confirm.remainder = DataGrid1(rno, cno + 3)

        ElseIf cno = 1 Then
            confirm.start = DataGrid1(rno, cno - 1)
            confirm.plan = DataGrid1(rno, cno)
            confirm.important = DataGrid1(rno, cno + 1)
            confirm.remainder = DataGrid1(rno, cno + 2)

        ElseIf cno = 2 Then
            confirm.start = DataGrid1(rno, cno - 2)
            confirm.plan = DataGrid1(rno, cno - 1)
            confirm.important = DataGrid1(rno, cno)
            confirm.remainder = DataGrid1(rno, cno + 1)

        ElseIf cno = 3 Then
            confirm.start = DataGrid1(rno, cno - 3)
            confirm.plan = DataGrid1(rno, cno - 2)
            confirm.important = DataGrid1(rno, cno - 1)
            confirm.remainder = DataGrid1(rno, cno)
        End If
        MessageBox.Show("")
    End Sub


MessageBox.Show("confirm.Function名()")
で、クラスで値を使用することはできるのですが
クラスではなくフォームで値を使用したい場合はどのようにすればよいのでしょうか?

特攻隊長まるるう 2008/02/06(水) 18:19:38
フォームもクラスですので、同様の方法で値を設定することができます。

>MessageBox.Show("confirm.Function名()")
>で、クラスで値を使用することはできるのですが
それだとクラスの関数の戻り値ではなく、書いてある
そのままの文字列『confirm.Function名()』が表示
されるはずですが?

ぼず 2008/02/07(木) 17:38:50 <初心者>
特攻隊長まるるう様
ご返信ありがとうございます。

>そのままの文字列『confirm.Function名()』が表示されるはずですが?
""は余計ですね。
confirmというフォームにとばしたいので
MessageBox.Show(confirm.dtop())としたところ
無事に値を引き継ぐことができました。

次に、この取得した値を用いて検索を行い、その結果をLabelに表示させたいと考えています。
データベースへの接続はできていますす。
読み呼んだ値をLabelに表示させために以下のコードを作成したのですが
上手くいきません。

よろしくお願いします。

Public Function dtop()
        Dim confirm As New confirm
        Dim cn As New OleDb.OleDbConnection
        Dim cmd As New OleDb.OleDbCommand
        Dim rs As OleDb.OleDbDataReader

'データベースへの接続
       cn.ConnectionString = "Provider=Microsoft.jet.oledb.4.0;data source=scheduler.mdb"
        cn.Open()
        cmd = cn.CreateCommand()
        cmd.CommandText = "SELECT 予定,内容,日時,時間,分 FROM db WHERE 日時 = '" & start & "' AND 予定 = '" & plan & "' AND 優先度 = '" & important & "'"

'データベースの値を取得
        rs = cmd.ExecuteReader()
        response = rs.Read()
        If response Then
            Label9.Text = rs.Item("予定")
            Label6.Text = rs.Item("内容")
            Label8.Text = rs.Item("日時")
            Label7.Text = rs.Item("時間")
            Label10.Text = rs.Item("分")

            'readlabel = "予定: " & response1 & Environment.NewLine & "内容: " & response2
            cn.Close()
        Else
            response = "該当するデータがありません"
            cn.Close()
            'Return response
        End If
        MessageBox.Show("エラーが発生しました")
    End Function

特攻隊長まるるう 2008/02/08(金) 11:25:22
>上手くいきません。
では分かりません。
ステップ実行して何がどううまくいってないか確認してください。

ぼず 2008/02/08(金) 11:55:39 <初心者>
特攻隊長まるるう様

説明不足で申し訳ございませんでした。

DataGridのセルをクリックすると
「エラーが発生しました」と表示されてしまいます。

MessageBox.Show("エラーが発生しました")をコメントアウトし
ブレークポイントをつけて実行してみたところ、
Label9.Text = rs.Item("予定")
Label6.Text = rs.Item("内容")
Label8.Text = rs.Item("日時")
Label7.Text = rs.Item("時間")
Label10.Text = rs.Item("分")

Label9.Text = rs.Item("予定")でエラーが発生し
追加情報 : 指定されたキャストは有効ではありません。
となってしまいます。

特攻隊長まるるう 2008/02/08(金) 18:22:58
データが NULL なのでは?

ぼす 2008/02/10(日) 00:21:50 <初心者>
特攻隊長まるるう様
きちんと中身が入っていることを確認しました。

matsu 2008/02/11(月) 11:45:08
>Label9.Text = rs.Item("予定")でエラーが発生し
>追加情報 : 指定されたキャストは有効ではありません。
>となってしまいます。

rs.Item("予定").ToString
としてもエラーになりますか?

ぼず 2008/02/11(月) 16:16:23 <初心者>
特攻隊長まるるう様 matsu様

お力添えのおかげで無事に表示させることができました。
ありがとうございました。

ぼず 2008/02/11(月) 16:16:28 <初心者>
[[解決]]

特攻隊長まるるう様 matsu様

お力添えのおかげで無事に表示させることができました。
ありがとうございました。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library