tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルListBoxで・・・
記事No2265
投稿日: 2005/09/26(Mon) 11:20
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
また問題が・・・
txt商品で商品コード入力してイベントが発生して、商品コードがなかったらエラーメッセージが表示
される
ようになってますが、メッセージが表示されてからOKボタンを押すと、今まで表示されていた商品が
表示され
なくなってしまいます。
※Throw New Exception("商品コードがありません")
ここから、
Catch ex As Exception
 Throw ex
のところにいくのですが、エラーが表示されてからいままで表示されていたのはそのままにしておき
、さらに
txt商品にフォーカスを移したいのですが、自分でやってみたのですが、どうもうまくいきません。
どうしたらいいのでしょうか??
もういちど、商品コードを打ち直すとでてくるのですが・・

[ツリー表示へ]
タイトルRe: ListBoxで・・・
記事No2266
投稿日: 2005/09/26(Mon) 12:35
投稿者なおこ(・∀・)
お世話になります。

Try〜Catch構文は、入れ子にすることができます。
なので、
SetSyohinMasterを呼ぶ側のメソッド内で以下のように
Try〜Catchを入れ子にしましょう。
ステップ実行で追えば、商品コードの存在有無により
プログラムの流れが変わる事が確認できるはずです。

Try
  Me.SetSyohinMaster(Me.txt商品.Text, True)
  For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1
  …
  Next
Catch ex As Exception
  MessageBox.Show(ex.Message)
  Me.txt商品.Focus()
End Try

> [OSのVer]:Windows    [VBのVer]:VB.NET  
> また問題が・・・
> txt商品で商品コード入力してイベントが発生して、商品コードがなかったらエラーメッセージが表示
> される
> ようになってますが、メッセージが表示されてからOKボタンを押すと、今まで表示されていた商品が
> 表示され
> なくなってしまいます。
> ※Throw New Exception("商品コードがありません")
> ここから、
> Catch ex As Exception
>  Throw ex
> のところにいくのですが、エラーが表示されてからいままで表示されていたのはそのままにしておき
> 、さらに
> txt商品にフォーカスを移したいのですが、自分でやってみたのですが、どうもうまくいきません。
> どうしたらいいのでしょうか??
> もういちど、商品コードを打ち直すとでてくるのですが・・

[ツリー表示へ]
タイトルRe^2: ListBoxで・・・
記事No2269
投稿日: 2005/09/26(Mon) 13:32
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> お世話になります。
>
> Try〜Catch構文は、入れ子にすることができます。
> なので、
> SetSyohinMasterを呼ぶ側のメソッド内で以下のように
> Try〜Catchを入れ子にしましょう。
> ステップ実行で追えば、商品コードの存在有無により
> プログラムの流れが変わる事が確認できるはずです。
>
> Try
>   Me.SetSyohinMaster(Me.txt商品.Text, True)
>   For i As Integer = 0 To Me.m_TestDt.Rows.Count - 1
>   …
>   Next
> Catch ex As Exception
>   MessageBox.Show(ex.Message)
>   Me.txt商品.Focus()
> End Try
上記のようにMe.txt商品.Focus()を入れてフォーカスは移動するのですが、やはり、エラー表示された
後は
ListBoxの商品が消えてしまいます。商品コードを打ち直せば今まで表示されていたものは出てくるので
すが、
それでは格好が悪いので。
あと、商品を削除する時なのですが、連続して削除してから商品コードを入力してイベントが走ると最
初の一回
目の削除した商品は削除されるのですが、2個目以降削除した商品はなぜか削除されずにまた表示されて
しまいま
す。
どうしたらいいのでしょうか??
よろしくお願いします。

原因は削除ボタンのイベントの
If rows.Length > 0 Then
                    Me.m_TestDt.Rows.Remove(rows(0))
                End If
の部分で
連続して削除した時にLengthの値が0になっているからだと思いますが。一回目は1になっているのです。

[ツリー表示へ]
タイトルRe^3: ListBoxで・・・
記事No2270
投稿日: 2005/09/26(Mon) 14:06
投稿者なおこ(・∀・)
お世話になります。

じゃ、こうですね。

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

    Try
      Me.SetSyohinMaster(Me.txt商品.Text, False)
    Catch ex As Exception
      MessageBox.Show(ex.Message)
      Me.txt商品.Focus()
      Exit Sub
    End Try
    list商品.Items.Clear()
    Me.m_ShohinCodes.Clear()

    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))
      Me.m_ShohinCodes.Add(CType(Me.m_TestDt.Rows(i)("商品コード"), String))
    Next
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  End Try
End Sub

> あと、商品を削除する時なのですが、連続して削除してから商品コードを入力してイベントが走ると
> 最初の一回
> 目の削除した商品は削除されるのですが、2個目以降削除した商品はなぜか削除されずにまた表示され
> てしまいます。
> どうしたらいいのでしょうか??
> よろしくお願いします。

btn削除_Clickの中で、Me.m_TestDt.Rows.Removeに渡す引数が間違っているのでしょう。
ステップ実行で追って確認してみてください。

[ツリー表示へ]
タイトルRe^4: ListBoxで・・・
記事No2271
投稿日: 2005/09/26(Mon) 14:16
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
商品コードへのフォーカス移動は出来ました。ありがとうございます。
しかし、

> btn削除_Clickの中で、Me.m_TestDt.Rows.Removeに渡す引数が間違っているのでしょう。
> ステップ実行で追って確認してみてください。

原因は削除ボタンのイベントの
If rows.Length > 0 Then
Me.m_TestDt.Rows.Remove(rows(0))
End If
の部分だと思うのですが。
連続して削除した時にLengthの値が0になっているからだと思いますが。一回目は1になっているのです

引数の所とはここの場所が原因なのでしょうか?

[ツリー表示へ]
タイトルRe^5: ListBoxで・・・
記事No2273
投稿日: 2005/09/26(Mon) 14:51
投稿者なおこ(・∀・)
お世話になります。

> > btn削除_Clickの中で、Me.m_TestDt.Rows.Removeに渡す引数が間違っているのでしょう。
> > ステップ実行で追って確認してみてください。
> は
> 原因は削除ボタンのイベントの
> If rows.Length > 0 Then
> Me.m_TestDt.Rows.Remove(rows(0))
> End If
> の部分だと思うのですが。
> 連続して削除した時にLengthの値が0になっているからだと思いますが。一回目は1になっているので

> 。
> 引数の所とはここの場所が原因なのでしょうか?

そうです。
Me.m_TestDt.Rows.Remove(rows(0))の中のrows(0)ですね。

> 連続して削除した時にLengthの値が0になっているからだと思いますが。一回目は1になっているので


この行の上に
Dim shohincode As String = Me.m_ShohinCodes(Me.list商品.SelectedIndex)
Dim rows() As DataRow = Me.m_TestDt.Select("商品コード=" + shohincode)
という記述があると思いますが、
これが何をやっているのか理解していますか?
この2行で、rows.lengthがいくつになるか決まります。

Me.list商品.SelectedIndexは期待通りの値ですか?
変数shohincodeに入っている値は期待通りですか?
ステップ実行して確認してください。

[ツリー表示へ]
タイトルRe^6: ListBoxで・・・
記事No2274
投稿日: 2005/09/26(Mon) 15:09
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET    
> Me.list商品.SelectedIndexは期待通りの値ですか?
の値はListBoxの何番めにあるかですよね?(0番だと一番上)
一回目の削除時のMe.list商品.SelectedIndexの値は0
二回目の値は0(これは一回目に削除しているから0でいいとおもいますが・・)

> 変数shohincodeに入っている値は期待通りですか?
問題はここかな?
一回目の削除時の値は
shohincode=1
二回目の削除時は
shohincode=1
と一回目の商品コードと一緒になってます。
これっておかしいですよね?
では、ここが問題の箇所ということでか??
違ってたらごめんなさい。

[ツリー表示へ]
タイトルRe^7: ListBoxで・・・
記事No2277
投稿日: 2005/09/26(Mon) 15:41
投稿者なおこ(・∀・)
お世話になります。

> [OSのVer]:Windows    [VBのVer]:VB.NET    
> > Me.list商品.SelectedIndexは期待通りの値ですか?
> の値はListBoxの何番めにあるかですよね?(0番だと一番上)
> 一回目の削除時のMe.list商品.SelectedIndexの値は0
> 二回目の値は0(これは一回目に削除しているから0でいいとおもいますが・・)
>
> > 変数shohincodeに入っている値は期待通りですか?
> 問題はここかな?
> 一回目の削除時の値は
> shohincode=1
> 二回目の削除時は
> shohincode=1
> と一回目の商品コードと一緒になってます。
> これっておかしいですよね?
> では、ここが問題の箇所ということでか??
そうですね。そこが問題なのでしょう。

m_ShohinCodes(インデックス)で取れる値と、
CType(Me.m_TestDt.Rows(インデックス)("商品コード"), String)
で取れる値が同じでないとまずいって事ですよね。
(==双方のインデックスの同期が取れていないとまずいという事)
なので、Me.m_TestDt.Rows.Remove(rows(0))の後に
Me.m_ShohinCodes.Remove(shohincode)
を追加してやればよいでしょう。

[ツリー表示へ]
タイトルRe^8: ListBoxで・・・
記事No2278
投稿日: 2005/09/26(Mon) 15:50
投稿者じゅん
[OSのVer]:Windows    [VBのVer]:VB.NET  
> m_ShohinCodes(インデックス)で取れる値と、
> CType(Me.m_TestDt.Rows(インデックス)("商品コード"), String)
> で取れる値が同じでないとまずいって事ですよね。
> (==双方のインデックスの同期が取れていないとまずいという事)
> なので、Me.m_TestDt.Rows.Remove(rows(0))の後に
> Me.m_ShohinCodes.Remove(shohincode)
> を追加してやればよいでしょう。
なるほど、そういう事だったんですね!!
これで一つ勉強になりました。
まだ、他にわからないところがあるので、投稿させていただきます。

[ツリー表示へ]
タイトルレスが続くようならこの後に
記事No2279
投稿日: 2005/09/26(Mon) 15:51
投稿者花ちゃん
前回のようになると見苦しくなりますので、途中で前に出してご利用されるか
早めに パートU で新しいスレッドを立てるかにして下さい。

[ツリー表示へ]