tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルListBoxから選択項目削除できない
記事No2156
投稿日: 2005/09/17(Sat) 09:21
投稿者じゅん
[OSのVer]:WindowsXP    [VBのVer]:VB.NET  
ListBoxから選択されたものを削除したいのですが削除しようとするとエラーが出てしまいます。

<下記コード>
Private Sub txt商品_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txt商品.LostFocus
        Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection( _
                "Data Source = localhost;Persist Security Info=False" _
                & ";Integrated Security=SSPI;database=Yuukari")
        Dim dSet As DataSet = New DataSet("t_商品マスタ")
        Dim dAdp As SqlClient.SqlDataAdapter

        scn.Open()

        dAdp = New SqlClient.SqlDataAdapter("SELECT * FROM T_M_商品マスタ Where 商品コ
ード
= " & CInt(txt商品.Text), scn)
        dAdp.Fill(dSet, "t_商品マスタ")

        Dim dt As DataTable = dSet.Tables("t_商品マスタ")
        For i As Integer = 0 To dt.Rows.Count - 1
            list商品.Items.Add(CType(dt.Rows(i)("商品コード"), String) + ":&
quot; + CType
(dt.Rows(i)("商品名"), String))
        Next


        scn.Close()


        btn削除.Enabled = True
        txt数量.Enabled = True
        txt数量.Focus()
        list商品.Enabled = True
        btn修正.Enabled = True
        btn送信.Enabled = True

    End Sub


Private Sub btn削除_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btn削除.Click
        '***今現在の削除方法 2005/09/15 始め***
        '選択された商品を削除する
        If MsgBox("削除してもよろしいですか?", MsgBoxStyle.YesNo) = MsgBoxResult
.Yes Then

            Dim dt As DataTable = CType(list商品.DataSource, DataTable)
            dt.Rows.RemoveAt(Me.list商品.SelectedIndex)
            Me.list商品.Refresh()

        End If

        '***今現在の削除方法 2005/09/15 終わり***
    End Sub

上記のコードだとエラーが発生
  dt.Rows.RemoveAt(Me.list商品.SelectedIndex)
の場所で。
このエラーをなくすにはどうしたらいいですか?

あと、今のままだとListBoxに『1:商品名』と出てしまい。『1:』が表示されないようにするにはどう
したらいいでしょうか。
いろいろ質問してしまいすいません。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: ListBoxから選択項目削除できない
記事No2157
投稿日: 2005/09/17(Sat) 10:24
投稿者まか
> <下記コード>
> Private Sub txt商品_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handl
es
> txt商品.LostFocus
>         Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection( _
>                 "Data Source = localhost;Persist Security Info=False" _
>                 & ";Integrated Security=SSPI;database=Yuukari")
>         Dim dSet As DataSet = New DataSet("t_商品マスタ")
>         Dim dAdp As SqlClient.SqlDataAdapter
>
>         scn.Open()
>
>         dAdp = New SqlClient.SqlDataAdapter("SELECT * FROM T_M_商品マスタ Where 商
品コ
> ード
> = " & CInt(txt商品.Text), scn)
>         dAdp.Fill(dSet, "t_商品マスタ")
>
>         Dim dt As DataTable = dSet.Tables("t_商品マスタ")
>         For i As Integer = 0 To dt.Rows.Count - 1
>             list商品.Items.Add(CType(dt.Rows(i)("商品名"), String))  ←★修

>         Next
>
>
>         scn.Close()
>
>
>         btn削除.Enabled = True
>         txt数量.Enabled = True
>         txt数量.Focus()
>         list商品.Enabled = True
>         btn修正.Enabled = True
>         btn送信.Enabled = True
>
>     End Sub
>
>
> Private Sub btn削除_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
> Handles btn削除.Click
>         '***今現在の削除方法 2005/09/15 始め***
>         '選択された商品を削除する
>         If MsgBox("削除してもよろしいですか?", MsgBoxStyle.YesNo) = MsgBoxRes
ult
> .Yes Then
>
>             Dim dt As DataTable = CType(list商品.DataSource, DataTable)
>             dt.Rows.RemoveAt(Me.list商品.SelectedIndex)
>             Me.list商品.Refresh()
>
>         End If
>
>         '***今現在の削除方法 2005/09/15 終わり***
>     End Sub
>
> 上記のコードだとエラーが発生
>   dt.Rows.RemoveAt(Me.list商品.SelectedIndex)
> の場所で。
> このエラーをなくすにはどうしたらいいですか?

下のツリーのなおこ(・∀・)さんの文章を読むと
「ListBoxにデータベースなどのデータをバインドした場合、
Item.Removeはできないです。」とありますので、現在バインドしていないので、元のコードに戻せばい
いと思います。

Dim dt As DataTable = CType(list商品.DataSource, DataTable)
        dt.Rows.RemoveAt(Me.list商品.SelectedIndex)
とりあえず、上記2行はコメントにして

        list商品.Items.Remove(list商品.SelectedItem)

> あと、今のままだとListBoxに『1:商品名』と出てしまい。『1:』が表示されないようにするには
どう
> したらいいでしょうか。

★参照。

で、いけると思うのですが。。。

[ツリー表示へ]
タイトルRe^2: ListBoxから選択項目削除できない
記事No2158
投稿日: 2005/09/17(Sat) 11:05
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
できました。本当にありがとうございます。
初心者なもので。VB6はわかるのですが・・

で、ついでにもうひとつ聞きたい事があるのですが。
ListBoxに表示した商品名の次に「txt数量」に数量を入れるとさっき表示した商品名の右(LisBoxの右端
(長さ
は大文字で20文字くらい))に表示したいのですが、何か言い方法があれば教えてもらえないでしょうか

説明のしかたが悪かったらすいません。
よろしくお願いします。

[ツリー表示へ]
タイトルRe^3: ListBoxから選択項目削除できない
記事No2159
投稿日: 2005/09/17(Sat) 11:28
投稿者まか
> で、ついでにもうひとつ聞きたい事があるのですが。
> ListBoxに表示した商品名の次に「txt数量」に数量を入れるとさっき表示した商品名の右(LisBox
の右
> 端(長さは大文字で20文字くらい))に表示したいのですが、何か言い方法があれば教えてもらえな
いで
> しょうか
> 。
リストボックスに2つ表示したいのですか?
なおこ(・∀・)さんのコードを参考にして、下記はどうですか?

'list商品.Items.Add(CType(dt.Rows(i)("商品名"), String))
上記コードは止めて、下記コードに書き換えると。

list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) + txt数量.Text)

[ツリー表示へ]
タイトルRe^4: ListBoxから選択項目削除できない
記事No2160
投稿日: 2005/09/17(Sat) 11:37
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> > で、ついでにもうひとつ聞きたい事があるのですが。
> > ListBoxに表示した商品名の次に「txt数量」に数量を入れるとさっき表示した商品名の右(Li
sBox
> の右
> > 端(長さは大文字で20文字くらい))に表示したいのですが、何か言い方法があれば教えてもら
えな
> いで
> > しょうか
> > 。
> リストボックスに2つ表示したいのですか?
> なおこ(・∀・)さんのコードを参考にして、下記はどうですか?
>
> 'list商品.Items.Add(CType(dt.Rows(i)("商品名"), String))
> 上記コードは止めて、下記コードに書き換えると。
>
> list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) + txt数量.Text)

この方法でやってみたのですが、2つ(数量がついている・ついてない)が出てしまいます。
数字が出ているのを1つだけ表示させたいのですが。

[ツリー表示へ]
タイトルRe^5: ListBoxから選択項目削除できない
記事No2161
投稿日: 2005/09/17(Sat) 11:41
投稿者まか

> この方法でやってみたのですが、2つ(数量がついている・ついてない)が出てしまいます。
> 数字が出ているのを1つだけ表示させたいのですが。

すいません、数量はテキストボックスに入力するのですよね? ちょっと意味が分からないのですが?
「数量がついている・ついていない」って具体的にどんな感じでしょうか?

[ツリー表示へ]
タイトルRe^6: ListBoxから選択項目削除できない
記事No2162
投稿日: 2005/09/17(Sat) 11:50
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
>
> > この方法でやってみたのですが、2つ(数量がついている・ついてない)が出てしまいます

> > 数字が出ているのを1つだけ表示させたいのですが。
>
> すいません、数量はテキストボックスに入力するのですよね? ちょっと意味が分からないのです
が?
> 「数量がついている・ついていない」って具体的にどんな感じでしょうか?

説明が悪くてごめんなさい。
<Listbox>の表示
商品名1
商品名2   数量

と二つ表示してしまいます。
<下記コードでやると>
Private Sub txt商品_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txt商品.LostFocus
        Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection( _
                "Data Source = localhost;Persist Security Info=False" _
                & ";Integrated Security=SSPI;database=Yuukari")
        Dim dSet As DataSet = New DataSet("T_商品マスタ")
        Dim dAdp As SqlClient.SqlDataAdapter

        scn.Open()

        dAdp = New SqlClient.SqlDataAdapter("SELECT * FROM T_M_商品マスタ Where 商品コー

= " & CInt(txt商品.Text), scn)
        dAdp.Fill(dSet, "T_商品マスタ")

        Dim dt As DataTable = dSet.Tables("T_商品マスタ")
        For i As Integer = 0 To dt.Rows.Count - 1
            'list商品.Items.Add(CType(dt.Rows(i)("商品コード"), String) + ":&q
uot; + CType(dt.Rows
(i)("商品名"), String))
            list商品.Items.Add(CType(dt.Rows(i)("商品名"), String))
        Next

        DataGrid1.DataSource = dt
        DataGrid1.RowHeadersVisible = False
        DataGrid1.ColumnHeadersVisible = False
        scn.Close()

    End Sub

Private Sub txt数量_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txt数量.LostFocus
        Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection( _
                "Data Source = localhost;Persist Security Info=False" _
                & ";Integrated Security=SSPI;database=Yuukari")
        Dim dSet As DataSet = New DataSet("T_商品マスタ")
        Dim dAdp As SqlClient.SqlDataAdapter

        scn.Open()

        dAdp = New SqlClient.SqlDataAdapter("SELECT * FROM T_M_商品マスタ Where 商品コー

= " & CInt(txt商品.Text), scn)
        dAdp.Fill(dSet, "T_商品マスタ")

        Dim dt As DataTable = dSet.Tables("T_商品マスタ")
        For i As Integer = 0 To dt.Rows.Count - 1
            '『""』のスペースは今のListBoxのサイズだと全角スペース21文字分
            list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) + "    
       
          " + txt数量.Text)
        Next

        scn.Close()
    End Sub

[ツリー表示へ]
タイトルRe^7: ListBoxから選択項目...
記事No2164
投稿日: 2005/09/17(Sat) 13:57
投稿者なおこ(・∀・)
お世話になります。

>         Dim dt As DataTable = dSet.Tables("T_商品マスタ")

←ここに、list商品.Items.Clear()を入れましょう。

>         For i As Integer = 0 To dt.Rows.Count - 1
>             '『""』のスペースは今のListBoxのサイズだと全角スペース21文字分
>             list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) + " 
   
>        
>           " + txt数量.Text)
>         Next

あと、↓これは
list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) _
          + StrDup(21, "全角スペース") _
          + txt数量.Text)
になりますかね。
>             list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) + " 
   
>        
>           " + txt数量.Text)

んで、これは蛇足かもしれませんが、上のソースみると、
txt商品_LostFocusとtxt数量_LostFocusでデータベースから値取り直してますよね。
これって、何も制御していないと
前におっしゃってた、削除ボタン押した時の"画面上での"削除が
意味なくなっちゃうけど、
さすがにその辺はちゃんと考慮されてますよね?

[ツリー表示へ]
タイトルRe^8: ListBoxから選択項目...
記事No2165
投稿日: 2005/09/17(Sat) 14:24
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
返事ありがとうございます。
削除の方は今の所問題はないのですが、上記のようにやると2品目の商品を表示しようとすると1品目
の商品が消えてしまい。今度は1つの商品しか表示できなくなってしまいます。

@txt商品→コード入力
<結果>
商品1
Atxt数量→数量入力
<結果>
商品1 数量

ここまではいいのですが、次が問題なのです。
@・Aを繰り返そうとすると商品1が消えてしまい新しい商品が表示されてしまう。
2回目以降の商品は追加する感じで表示させたいのです。
何かいい方法はないでしょうか?

[ツリー表示へ]
タイトルRe^9: ListBoxから選択項目...
記事No2167
投稿日: 2005/09/17(Sat) 18:41
投稿者なおこ(・∀・)
お世話になります。

> 削除の方は今の所問題はないのですが、上記のようにやると2品目の商品を表示しようとすると1品

> の商品が消えてしまい。今度は1つの商品しか表示できなくなってしまいます。
>
> @txt商品→コード入力
> <結果>
> 商品1
> Atxt数量→数量入力
> <結果>
> 商品1 数量
>
> ここまではいいのですが、次が問題なのです。
> @・Aを繰り返そうとすると商品1が消えてしまい新しい商品が表示されてしまう。
> 2回目以降の商品は追加する感じで表示させたいのです。

ちょっと上の状況があまり把握できないのですが、
こんな感じでしょうか。
ちなみに、今はVisualStudioが手元にないので、動作確認してません。あしからず。

Private m_MasterDt as DataTable
Private m_TestDt as DataTable

Private Sub Form_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_M_商品マスタ Where 商品コード = "+ syohin , scn )
    dAdp.Fill(dSet, "T_商品マスタ")
    Me.m_MasterDt = dSet.Tables("T_商品マスタ")
    
    '内部用のDataTableを作成
    Me.m_TestDt = New DataTable()
    Me.m_TestDt = Me.m_MasterDt.Clone()
    Me.m_TestDt.Columns.Add( New DataColumn( "表示", GetType(Integer))
    Me.m_TestDt.Columns.Add( New DataColumn( "数量表示", GetType(Integer))
    Me.m_TestDt.Columns("表示").Defaultvalue = 0
    Me.m_TestDt.Columns("数量表示").Defaultvalue = 0
    For Each row As DataRow In Me.m_MasterDt.Rows
      Dim newrow As DataRow = Me.m_TestDt.NewRow()
      For i As Integer = 0 to Me.m_MasterDt.Columns.Count -1
        newrow(i) = row(i)
      Next
      Me.m_TestDt.Rows.Add(newrow)
    Next
  Catch ex As Exception
    Trace.WriteLine( ex.Message )
  Finally
    If Not IsNothing( scn ) Then scn.Close()
  End Try
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
    Dim dt As DataTable = Me.GetSyohinMaster( Me.txt商品.Text , False )
    For i As Integer = 0 To dt.Rows.Count -1
      list商品.Items.Add(CType(dt.Rows(i)("商品名"), String))
    Next
    With Me.DataGrid1
      .DataSource = dt
      .RowHeadersVisible = False
      .ColumnHeadersVisible = False
    End With
  Catch ex As Exception
    Trace.WriteLine( ex.Message )
  End Try
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
    If Me.txt数量.Text = "" Then
      MessageBox.Show("数量が入力されていません")
      Exit Sub
    End If
    Dim dt As DataTable = Me.GetSyohinMaster( Me.txt商品.Text , True )
    For i As Integer = 0 To dt.Rows.Count -1
      list商品.Items.Add(CType(dt.Rows(i)("商品名"), String) _
                 + StrDup(21, " ") _
                 + txt数量.Text)
    Next
  Catch ex As Exception
    Trace.WriteLine( ex.Message )
  End Try
End Sub

Private Function GetSyohinMaster( ByVal syohin As String, ByVal checkSuryo As Boolean ) As
DataTable
  Try
    Dim filterRows As DataRow()
    Dim dt As DataTable = Me.m_MasterDt.Clone()
    If Not checkSuryo Then
      'txt商品_LostFocusで呼ばれた時(商品コード=引数 かつ list表示されていないレコード
を取得)
      filterRows = Me.m_MasterDt.Select(" 商品コード=" + syohin + " AND 表示 = 0")
    Else
      'txt数量_LostFocusで呼ばれた時(商品コード=引数 かつ数量が設定されていないレコード
を取得)
      filterRows = Me.m_MasterDt.Select(" 商品コード=" + syohin + " AND 数量表示 =
0")
    End If
    For Each row As DataRow In filterRows
      Dim newrow As DataRow = dt.NewRow()
      For i As Integer = 0 to dt.Columns.Count -1
        newrow(i) = row(i)
      Next
      dt.Rows.Add(newrow)
      row.BeginEdit()
      If Not checkSuryo Then
        row("表示") = 1
      Else
        row("数量表示") = 1
      End If
      row.EndEdit()
    Next
    Return dt
  Catch ex As Exception
    Trace.WriteLine( ex.Message )
  End Try
End Function

[ツリー表示へ]
タイトルRe^10: ListBoxから選択項目...
記事No2173
投稿日: 2005/09/20(Tue) 09:53
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
返事送れてすみません。
なおこさん返事ありがとうございます。
早速、コードを打ち直したのですが、エラーではないのですが、あるところに波線が出てしまいます。
<波線が出る場所>
Dim dt As DataTable = Me.GetSyohinMaster(Me.txt商品.Text, True)

Me.GetSyohinMaster(Me.txt商品.Text, True)
場所と
Return dt

dt
て場所で波線が出ます。
波線のエラー表示は『型'System.Data.DataTableの一次元配列'の値を'System.Data.DataTable'に変換
できません』
どうすればいいでしょうか?
よろしくお願いします。

[ツリー表示へ]
タイトルRe^11: ListBoxから選択項目...
記事No2175
投稿日: 2005/09/20(Tue) 11:53
投稿者なおこ(・∀・)
お世話になります。

前に自分が貼り付けたソースを、先ほど試してみたら、
少しおかしいと思われるところがあったので、
再度、作り直してみました。
メンバ変数のm_MasterDtは、DBの商品マスタの値を全て持っています。
メンバ変数のm_TestDtは、リストビューの値を管理しているDataTableです。
どのような感じで管理しているのかは、SetSyohinMasterを見てみてください。

==================================================================
Private m_MasterDt As DataTable
Private m_TestDt As DataTable

Private Sub Form_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
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
    With Me.DataGrid1
      .DataSource = Me.m_TestDt
      .RowHeadersVisible = False
      .ColumnHeadersVisible = False
    End With
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  End Try
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
    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

[ツリー表示へ]
タイトルRe^12: ListBoxから選択項目...
記事No2179
投稿日: 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

===================================================================
以上今現在の動きに必要なコードです。
よろしくお願いします

[ツリー表示へ]
タイトルRe^13: ListBoxから選択項目...
記事No2181
投稿日: 2005/09/20(Tue) 14:30
投稿者なおこ(・∀・)
お世話になります。

プロジェクト→スタートアップをForm2に変えても同様の実行時エラーが出ますか?
私の環境では、特に実行時エラーは出ませんでしたが…。

> そこで質問なんですが、Form2(frm注文入力)のLoadイベントは2回は行われることになるのですか?
これは、Form2(frm注文入力)のLoadにブレークポイントを付けて
ステップ実行すれば、何回実行されるかわかると思います。

> <実行時エラーの内容>
> @Form1(frm担当者コード入力)で担当者コード入力してOKボタンを押すと
> 『キーワードはサポートされていません:'integratedsecurity'』のエラー
これは、Form1のソースを見ないとちょっと解りかねます。

> AFrom2(frm注文入力)で商品(txt商品)に数値を入力ごフォーカスを動かすと
> 『オブジェクト参照がオブジェクトインスタンスに設定されていません。』のエラー
> ※数量(txt数量)のイベント発生時も同じ

おそらくSetSyohinMasterの中だとは思いますが、
ステップ実行をし、SetSyohinMasterの中のどの行で例外が発生しているのか
場所の特定をお願いいたします。
あと、例外の種類も教えてください。
(Catch以降にブレークポイントを付けて、ウォッチでexの中身を見ればわかります)

[ツリー表示へ]
タイトルRe^14: ListBoxから選択項目...
記事No2182
投稿日: 2005/09/20(Tue) 14:53
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
お世話になります。

exのエラーは
ex={System.NullReferenceException} 
です。

それと、
プロジェクト→スタートアップをForm2に変えても同様の実行時エラーが出ます!!。

<下記にコード>米長くてすいません。

@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) The
n
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) The
n
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) The
n
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) The
n
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

===================================================================
以上今現在の動きに必要なコードです。
よろしくお願いします

[ツリー表示へ]
タイトルRe^15: ListBoxから選択項目...
記事No2184
投稿日: 2005/09/20(Tue) 15:46
投稿者なおこ(・∀・)
お世話になります。

じゅんさんが提示されたソースを実行してみました。

>@Form1(frm担当者コード入力)で担当者コード入力してOKボタンを押すと
>『キーワードはサポートされていません:'integratedsecurity'』のエラー

→原因
 frm2の
 >scn = New SqlClient.SqlConnection( _
 >"Data Source = localhost;PersistSecurityInfo=False" _
 >+ ";IntegratedSecurity=SSPI;database=Yuukari")
 上記SqlClient.SqlConnectionのコンストラクタに渡す引数の誤り。
 SQLServer側の設定を見直す(Windows統合認証)か、引数の中身を変えてください。
#ちなみに、私が実験時に使ったものは以下のような感じ。
"Server=サーバー名;Initial Catalog=DB名;UID=ユーザーID;PWD=パスワード"

>AFrom2(frm注文入力)で商品(txt商品)に数値を入力ごフォーカスを動かすと
>『オブジェクト参照がオブジェクトインスタンスに設定されていません。』のエラー
>※数量(txt数量)のイベント発生時も同じ
→原因
 @のエラーにより、データベースへの接続に失敗し、
 データベースから値が取れなかったため、
 m_TestDt、m_MasterDtにNothingが設定されていたため、
 発生した例外。

[ツリー表示へ]
タイトルRe^16: ListBoxから選択項目...
記事No2185
投稿日: 2005/09/20(Tue) 15:57
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> お世話になります。
上記SqlClient.SqlConnectionのコンストラクタに渡す引数の誤り。
>  SQLServer側の設定を見直す(Windows統合認証)か、引数の中身を変えてください。
> #ちなみに、私が実験時に使ったものは以下のような感じ。
> "Server=サーバー名;Initial Catalog=DB名;UID=ユーザーID;PWD=パスワード"
とは具体的にどうすればよいのでしょう。
とくに『SQLServer側の設定を見直す(Windows統合認証)か、引数の中身』とはどういったようにすれ
ばいいのか教えてください。
何度もすみません。

[ツリー表示へ]
タイトルRe^17: ListBoxから選択項目...
記事No2190
投稿日: 2005/09/20(Tue) 16:39
投稿者なおこ(・∀・)
お世話になります。

Windows統合認証については、こちらを参照して下さい。
hhttp://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vsent7/html/vxconDatabaseSecurity.asp

hhttp://ukamen.hp.infoseek.co.jp/Programming3/DBConsole/

あと、コンストラクタの引数の中に
IntegratedSecurity
というものがあると思うのですが
Integrated Security
に変更しても駄目でしたら、

'scn = New SqlClient.SqlConnection( _
'"Data Source = localhost;PersistSecurityInfo=False" _
'+ ";Integrated Security=SSPI;database=Yuukari")

scn = New SqlClient.SqlConnection("Server=localhost;Initial Catalog=Yuukari;" _
                 + "UID=ユーザーID;PWD=パスワード")
に変更してみてください。

[ツリー表示へ]
タイトルRe^18: ListBoxから選択項目...
記事No2193
投稿日: 2005/09/20(Tue) 17:09
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> お世話になります。
Integrated Security
にしたらできました。

ついでになんですが、Form2(frm注文入力)で商品を何個か表示させた後に、指定した商品の数量だけを
変更したいと思っています。
<実行例>
@ListBox(list商品)から商品を選択する
Atxt数量で変更したい数量に変更する
※この時点では数量は変更されない。
B修正ボタン(btn修正)をクリックご変更される。
※このときListBoxの並び順は変更されない。

以上の条件で実行は可能でしょうか?
できたらコードをお願いします。
ちなみに、自分が思うには、数量のイベント(TextChenge)なのでボタンを押さなくても変更されてしま
いそうなのですが、上記の条件でやる場合はイベント発生を変えたほういいのでしょうか?
よろしくお願いします。

あ!次からタイトル変えて投稿します。(横長になって見にくいので(笑))

[ツリー表示へ]
タイトルRe^19: ListBoxから選択項目...
記事No2198
投稿日: 2005/09/20(Tue) 18:23
投稿者なおこ(・∀・)
お世話になります。

TextChengeじゃなくて、btn修正.Clickイベントに
現在のTextChengeの中でやっている事を書けばよいと思いますが。

> [OSのVer]:Windows    [VBのVer]:VB.NET  
> > お世話になります。
> Integrated Security
> にしたらできました。
>
> ついでになんですが、Form2(frm注文入力)で商品を何個か表示させた後に、指定した商品の数量だけ

> 変更したいと思っています。
> <実行例>
> @ListBox(list商品)から商品を選択する
> Atxt数量で変更したい数量に変更する
> ※この時点では数量は変更されない。
> B修正ボタン(btn修正)をクリックご変更される。
> ※このときListBoxの並び順は変更されない。
>
> 以上の条件で実行は可能でしょうか?
> できたらコードをお願いします。
> ちなみに、自分が思うには、数量のイベント(TextChenge)なのでボタンを押さなくても変更されてし

> いそうなのですが、上記の条件でやる場合はイベント発生を変えたほういいのでしょうか?
> よろしくお願いします。
>
> あ!次からタイトル変えて投稿します。(横長になって見にくいので(笑))

[ツリー表示へ]
タイトルRe^19: ListBoxから選択項目...
記事No2203
投稿日: 2005/09/20(Tue) 19:15
投稿者じゃんぬねっと
参照先http://jeanne.wankuma.com/
ここは、サポートセンターになりましたか。

[ツリー表示へ]