タイトル | : Re^12: ListBoxから選択項目... |
記事No | : 2179 |
投稿日 | : 2005/09/20(Tue) 13:47 |
投稿者 | : じゅん |
[OSのVer]:Windows [VBのVer]:VB.NET なおこさんありがとうございます。 教えてもらったコードでやってみたのですが、エラーは出ませんでしたが。 実行時エラー(?)が発生します。 その前に自分が作ったフォームの動きを
@Form1(frm担当者コード入力)で担当者コードを入力しOKボタンを押すとFrom2(frm注文入力)へFrom1で 入力した担当者コードが書き足される。 ※この時はデータベースなどは関係ない動きです。(今の所)
AFomr2(frm注文入力)画面では最初に入力ボタンを押してForm3(frmデータ入力)へ ※このときは入力ボタンを押して次の画面へ行かないと、Form(frm注文入力)での商品・数量などのは構 えないようしています。(先に客数・テーブル番号入力するため)
BForm3(frmデータ入力)ここでは客数(txt客数)とテーブル番号(txtテーブル番号)を入力し、OKボタン を押すとForm2(frm注文入力)へ飛び、From2(frm注文番号)にテーブル番号と客数が入力されます。 ※このときFrom3(frmデータ入力)は画面から消える(me.close()イベント)
CそしてFrom2(frm注文入力)で商品(txt商品)と数量(txt数量)の作業をします。
以上が簡単なフォームの動きです。 そこで質問なんですが、Form2(frm注文入力)のLoadイベントは2回は行われることになるのですか? <実行時エラーの内容> @Form1(frm担当者コード入力)で担当者コード入力してOKボタンを押すと 『キーワードはサポートされていません:'integratedsecurity'』のエラー
AFrom2(frm注文入力)で商品(txt商品)に数値を入力ごフォーカスを動かすと 『オブジェクト参照がオブジェクトインスタンスに設定されていません。』のエラー ※数量(txt数量)のイベント発生時も同じ
上記のエラーが出てしまいます。なんで出るのかわかりません。 イベント発生タイミングがいけないのでしょうか? お願いします。
一応今の書くフォームのコードを書いときます。 @From1(frm担当者コード入力)
Private frm2 As New frm注文入力
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click '***入力画面へ飛ぶ*** 'frm注文入力のテキストボックスにfrm担当者コードより書き込み() If txt担当者コード.Text <> "" Then frm2.MyForm2TextBox = txt担当者コード.Text frm2.ShowDialog() Else MsgBox("担当者コードを入力してください", MsgBoxStyle.OKOnly) txt担当者コード.Focus() End If
txt担当者コード.Text = "" End Sub ========================================================================================= AForm2(frm注文入力)
Private m_MasterDt As DataTable Private m_TestDt As DataTable
'frm注文入力のlblテーブルのプロパティの値を設定及び取得するためのプロパティ Public Property MyForm1TextBox1() As String Get 'lblテーブル.Text の内容を取得 Return lblテーブル.Text()
End Get 'lblテーブル.Text に書き込み Set(ByVal Value As String) lblテーブル.Text = Value
End Set End Property 'frm注文入力のlbl客数のプロパティの値を設定及び取得するためのプロパティ Public Property MyForm1TextBox2() As String Get 'lbl客数.Text の内容を取得 Return lbl客数.Text()
End Get 'lbl客数.Text に書き込み Set(ByVal Value As String) lbl客数.Text = Value
End Set End Property 'lbl担当のプロパティの値を設定及び取得するためのプロパティ Public Property MyForm2TextBox() As String Get 'lbl担当.Text の内容を取得 Return lbl担当.Text End Get 'lbl担当.Text に書き込み Set(ByVal Value As String) lbl担当.Text = Value End Set End Property
Private Sub frm注文入力_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim scn As SqlClient.SqlConnection Try scn = New SqlClient.SqlConnection( _ "Data Source = localhost;PersistSecurityInfo=False" _ + ";IntegratedSecurity=SSPI;database=Yuukari")
Dim dSet As DataSet = New DataSet("T_商品マスタ") Dim dAdp As SqlClient.SqlDataAdapter
scn.Open()
dAdp = New SqlClient.SqlDataAdapter( _ "SELECT * FROM T_商品マスタ", scn) dAdp.Fill(dSet, "T_商品マスタ") Me.m_MasterDt = dSet.Tables("T_商品マスタ")
''表示用 Me.m_TestDt = New DataTable With Me.m_TestDt .Columns.Add(New DataColumn("商品コード", GetType(String))) .Columns("商品コード").DefaultValue = ""
.Columns.Add(New DataColumn("商品名", GetType(String))) .Columns("商品名").DefaultValue = ""
.Columns.Add(New DataColumn("数量", GetType(String))) .Columns("数量").DefaultValue = "" End With
Catch ex As Exception MessageBox.Show(ex.Message) Finally If Not IsNothing(scn) Then scn.Close() End Try
btn削除.Enabled = False btn修正.Enabled = False btn送信.Enabled = False txt数量.Enabled = False txt商品.Enabled = False list商品.Enabled = False
'/// 日付取得方法(今現在)2005/09/14 始まり//// Dim day As Date day = Now
lbl営業日付.Text = Microsoft.VisualBasic.Left(day, 10) '/// 日付取得方法(今現在)2005/09/14 終わり////
End Sub
Private Sub btn修正_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn修正.Click '修正したい商品(list商品の商品を選択)の数量を変更したいときに使う 'txt数量を変更後、修正ボタンをクリックすると数量が変更(list商品の数量)される予定
End Sub
Private Sub btn削除_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn削除.Click '***今現在の削除方法 2005/09/17 始め*** '選択された商品を削除する If Not (list商品.SelectedItem Is Nothing) Then If MsgBox("削除してもよろしいですか?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
list商品.Items.Remove(list商品.SelectedItem
End If Else MsgBox("商品を選択してから削除ボタンを押してください。") End If '***今現在の削除方法 2005/09/17 終わり*** End Sub
Private Sub btn送信_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn送信.Click '送信作業
'終了作業(frm注文入力を終了してfrm担当者コードを表示(予定))
lbl担当.Text = "" lbl客数.Text = "" lblテーブル.Text = "" txt商品.Text = "" txt数量.Text = ""
'***今現在 2005/09/17 始め*** '何もListBoxにはいってない状態で下記の処理をするとエラーが発生 list商品.Items.Clear() '***今現在 2005/09/17 終わり***
Me.Close() End Sub Private Sub btn入力_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn入力.Click
Dim f2 As New frmデータ入力(Me) f2.Show() txt商品.Enabled = True
End Sub
Private Sub txt商品_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt商品.KeyPress '数値しか入力できないように制限する(簡易型) ' .-1234567890 及び Enter/BackSpace キーしか入力できない If e.KeyChar >= Microsoft.VisualBasic.Chr(32) And e.KeyChar < Microsoft.VisualBasic.Chr(45) Or _ e.KeyChar > Microsoft.VisualBasic.Chr(57) Or e.KeyChar = Microsoft.VisualBasic.Chr(47) Then e.Handled = True '入力キーを無効にする End If End Sub
Private Sub txt数量_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt数量.KeyPress '数値しか入力できないように制限する(簡易型) ' .-1234567890 及び Enter/BackSpace キーしか入力できない If e.KeyChar >= Microsoft.VisualBasic.Chr(32) And e.KeyChar < Microsoft.VisualBasic.Chr(45) Or _ e.KeyChar > Microsoft.VisualBasic.Chr(57) Or e.KeyChar = Microsoft.VisualBasic.Chr(47) Then e.Handled = True '入力キーを無効にする End If End Sub
Private Sub txt商品_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt商品.LostFocus Try If Me.txt商品.Text = "" Then MessageBox.Show("商品コードが入力されていません") Exit Sub End If
list商品.Items.Clear() Me.SetSyohinMaster(Me.txt商品.Text, False) For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1 list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _ + StrDup(21, " ") _ + CType(Me.m_TestDt.Rows(i)("数量"), String)) Next Catch ex As Exception MessageBox.Show(ex.Message) End Try
End Sub
Private Sub txt数量_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt数量.TextChanged Try If Me.txt商品.Text = "" Then MessageBox.Show("商品コードが入力されていません") Exit Sub End If If Me.txt数量.Text = "" Then MessageBox.Show("数量が入力されていません") Exit Sub End If
list商品.Items.Clear() Me.SetSyohinMaster(Me.txt商品.Text, True) For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1 list商品.Items.Add(CType(Me.m_TestDt.Rows(i)("商品名"), String) _ + StrDup(21, " ") _ + CType(Me.m_TestDt.Rows(i)("数量"), String)) Next Catch ex As Exception MessageBox.Show(ex.Message) End Try
End Sub
Private Sub SetSyohinMaster(ByVal syohin As String, ByVal suryo As Boolean) Try If Not suryo Then 'DB(m_MasterDt)に商品コードが存在するかどうかのチェック Dim rows() As DataRow = Me.m_MasterDt.Select("商品コード=" + syohin) Dim shohinname As String If rows.Length = 1 Then '商品マスタに存在したら、商品名を取得する。 shohinname = CType(rows(0)("商品名"), String) If Me.m_TestDt.Select("商品コード=" + syohin).Length < 1 Then '該当する商品コードがm_TestDtに存在しなければ、Rowを追加する。 Me.m_TestDt.Rows.Add(New Object() {syohin, shohinname, ""}) End If Else Throw New Exception("商品コードが存在しません") End If Else Dim rows() As DataRow = Me.m_TestDt.Select("商品コード=" + syohin) If rows.Length = 1 Then rows(0).BeginEdit() rows(0)("数量") = Me.txt数量.Text rows(0).EndEdit() End If End If Catch ex As Exception Throw ex End Try End Sub
===================================================== Form3(frmデータ入力) Private Sub txtテーブル番号_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtテーブル番号.KeyPress '数値しか入力できないように制限する(簡易型) ' .-1234567890 及び Enter/BackSpace キーしか入力できない If e.KeyChar >= Microsoft.VisualBasic.Chr(32) And e.KeyChar < Microsoft.VisualBasic.Chr(45) Or _ e.KeyChar > Microsoft.VisualBasic.Chr(57) Or e.KeyChar = Microsoft.VisualBasic.Chr(47) Then e.Handled = True '入力キーを無効にする End If End Sub
Private Sub txt客数_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt客数.KeyPress '数値しか入力できないように制限する(簡易型) ' .-1234567890 及び Enter/BackSpace キーしか入力できない If e.KeyChar >= Microsoft.VisualBasic.Chr(32) And e.KeyChar < Microsoft.VisualBasic.Chr(45) Or _ e.KeyChar > Microsoft.VisualBasic.Chr(57) Or e.KeyChar = Microsoft.VisualBasic.Chr(47) Then e.Handled = True '入力キーを無効にする End If End Sub
Private Sub btnクリア_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnクリア.Click txtテーブル番号.Text = "" txt客数.Text = "" End Sub
Private Sub btnキャンセル_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnキャンセル.Click Me.Close() End Sub Private frm1 As New frm注文入力 'frmデータ入力のコンストラクタ Public Sub New(ByVal f1 As frm注文入力) InitializeComponent() '呼び出しの後にコンストラクタコードを追加 frm1 = f1 End Sub Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click If txtテーブル番号.Text <> "" And txt客数.Text <> "" Then frm1.MyForm1TextBox1 = txtテーブル番号.Text frm1.MyForm1TextBox2 = txt客数.Text Me.Close() Else MsgBox("テーブル番号・客数を入力してください", MsgBoxStyle.OKOnly) txtテーブル番号.Focus() End If
End Sub
=================================================================== 以上今現在の動きに必要なコードです。 よろしくお願いします
|