- PR -

ASP.net+VB.net:ListBoxのSelectIndexの取得時にエラー

1
投稿者投稿内容
実月
会議室デビュー日: 2003/10/26
投稿数: 11
投稿日時: 2003-10-26 01:49
初めて質問させていただきます。

早速ですが今、名簿番号順に名前をListBoxに登録し、ListBoxから名前を選択後、
「表示」ボタンをクリックすると、名簿番号・出身校・電話番号が各ラベルに
表示される、というプログラムをASP.net+VB.netで作っています。

コード:


Dim Name(40) As String   '名前
Dim FromJH(40) As String '出身校
Dim Phon(40) As String   '電話番号

'フォームがロードされた時の処理
Private Sub Page_Load(ByVal sender As...)
'配列に名前追加
Name(0) = "田中太郎"

    ・

  Name(40) = "鈴木一郎"

'配列に出身校追加
FromJH(0) = "東京高校"

    ・

FromJH(40) = "大阪高校"

'配列に電話番号追加
Phon(0) = "XX-XXXX"

    ・

Phon(40) = "YY-YYYY"

'ListBoxにアイテムがない時だけ名前を追加
If ListBox.Items.Count = 0 Then      
Dim i As Integer

For i = 0 To 40
ListBox.Items.Add(Name(i))
Next
End If
End Sub

'「表示」ボタンを押した時の処理
Private Sub Button_Click(ByVal sender...)
If ListBox.SelectedIndex <> -1 Then
    '名簿番号を表示    
   MeiboLabel.Text = Cstr(ListBox.SelectedIndex + 1)
'学校名を表示
JHLabel.Text = FromJH(ListBox.SelectedIndex)
'電話番号を表示
PhonLabel.Text = Phon(ListBox.SelectedIndex)
End If
End Sub


上のコードで実行してみると「表示」ボタンを押した時の処理の
ListBox.SelectedIndex が -1 になってしまいます。
この方法以外思いつかないのですが、どのようにすれば正しく表示
されるのでしょうか?どなたかご教授お願いします。

[ メッセージ編集済み 編集者: 実月 編集日時 2003-10-26 01:50 ]
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-10-26 07:56
今日は

これだけの情報だと良く分かりませんが、現象からすると
EnableViewStateがFalseになっている可能性があります。
Falseだと毎回ListBoxが書き換わる為、常に-1となります。
出来ればIf ListBox.Items.Count = 0 Then の代わりに
If Not IsPostBack thenを使うと、そこの動きが分かると思います。

外れていたら、すみません。
実月
会議室デビュー日: 2003/10/26
投稿数: 11
投稿日時: 2003-10-26 13:14
ご返答ありがとうございます。
rvmxさんの仰った通りにやってみたのですが、やはりListBox.SelectedIndex
が -1 になってしまいます。色々と変えてやってみたところ・・・

変更前
コード:
'フォームがロードされた時の処理
Private Sub Page_Load(ByVal sender As...)
     ・
     ・
     ・
  'ListBoxにアイテムがない時だけ名前を追加
  If ListBox.Items.Count = 0 Then      
     Dim i As Integer

     For i = 0 To 40
       ListBox.Items.Add(Name(i))
     Next
  End If
End Sub

  '「表示」ボタンを押した時の処理
Private Sub Button_Click(ByVal sender...)
   If ListBox.SelectedIndex <> -1 Then                      
    '名簿番号を表示    
   MeiboLabel.Text = Cstr(ListBox.SelectedIndex+1)
       '学校名を表示
      JHLabel.Text = FromJH(ListBox.SelectedIndex)
       '電話番号を表示
      PhonLabel.Text = Phon(ListBox.SelectedIndex)
   End If
End Sub


の部分を

変更後
コード:
'フォームがロードされた時の処理
Private Sub Page_Load(ByVal sender As...)
     ・
     ・
     ・
   'ListBoxにアイテムがない時だけ名簿番号を追加
   If ListBox.Items.Count = 0 Then      
      Dim i As Integer

      For i = 1 To 41
        ListBox.Items.Add(i)
      Next
   End If
End Sub

'「表示」ボタンを押した時の処理
Private Sub Button_Click(ByVal sender...)
   If ListBox.SelectedIndex <> -1 Then                      
    '名前を表示    
   MeiboLabel.Text = Name(ListBox.SelectedIndex)
       '学校名を表示
      JHLabel.Text = FromJH(ListBox.SelectedIndex)
       '電話番号を表示
      PhonLabel.Text = Phon(ListBox.SelectedIndex)
   End If
End Sub

のように名簿番号を選択し、名前を表示させるように
変更してみると(太字部分が変更点です)ListBox.SelectedIndexは
正しい値が返ってきました。
これで自分の知識ではさらに分からなくなってしまいました。
引き続きよろしくお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2003-10-26 20:04
デバッグで追ってみて
'ListBoxにアイテムがない時だけ名前を追加
の処理は毎回実行されませんか?
おそらく毎回ListBoxが初期化されてると思います。
実月
会議室デビュー日: 2003/10/26
投稿数: 11
投稿日時: 2003-10-26 23:13
お返事ありがとうございます。
表示ボタンを押した時には
'ListBoxにアイテムがない時だけ名前を追加
の部分の処理は行われることはありません。
burton999さんが仰っているのは少なくとも
'「表示」ボタンを押した時の処理
の部分が終わった後で、再読み込みされる時に発生するものと思われます。
ちなみに表示ボタンを押した時点では各配列にはちゃんとデータが入っています
名前だとダメで番号だとOKというのは謎です・・・。
引き続きよろしくお願いします。
PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2003-10-27 09:22
clickイベントの後postbackが走ります
フォームロードイベントで
postbackで無い時だけコンボボックスを
初期化すればいいでしょう
postbackについては過去スレで
いっぱい出ていると思います調べて見てください
実月
会議室デビュー日: 2003/10/26
投稿数: 11
投稿日時: 2003-10-27 20:51
お返事ありがとうございます。

う〜ん色々やってみてるのですがどうも上手くいきません・・・。
VBでプログラム作る感覚でASPやると分からないことがぼろぼろ出てきます^^;
完全に勉強不足なんで、とりあえず基本をおさえてから出直してきます。
とりあえず返事が遅くなるのは避けたかったので、一応このスレは終了
ということにしたいと思います。解決しましたらまた報告します。
答えてくださった方ありがとうございました。
1

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