- 実月
- 会議室デビュー日: 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やると分からないことがぼろぼろ出てきます^^;
完全に勉強不足なんで、とりあえず基本をおさえてから出直してきます。
とりあえず返事が遅くなるのは避けたかったので、一応このスレは終了
ということにしたいと思います。解決しましたらまた報告します。
答えてくださった方ありがとうございました。
|