C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: コンボボックスで日付を選択したいのですが


(過去ログ 105 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■62909 / inTopicNo.1)  コンボボックスで日付を選択したいのですが
  
□投稿者/ trf (7回)-(2011/11/09(Wed) 21:14:41)

分類:[.NET 全般] 

コンボボックスを用いて、年 月 日を選択し、それぞれをtext型で保持
それらを結合してDATE型に変換
という処理を行いたく、コードを書きました。
また、コンボボックスの値を変更すると、その日付から曜日を取得できるようにしました。
その結果、そのフォームへ移動すると、エラーが出力されるようになりました。
最初はエラーの出力されるif文を記述していなかったのですが、1月31日など、ありえない日を選択した時にエラーが出力されるのを防ぐための処理を施そうとした結果、こうなってしまいました。
どうしても改善できなかったため、質問させていただきます。
お手数をおかけいたしますが、アドバイスよろしくお願いいたします。

[エラー内容]
String "" から型 'Double' への変換は無効です。
自動変数を確認すると、day_Combo.textが""になっている。
しかし、フォームのロード時に代入しているハズ…

[コード]
Private Sub new_induct_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'初期化
'年コンボボックスをセット
Dim i As Integer
For i = 1990 To 2100
year_Combo.Items.Add(i)
Next
'日コンボボックスをセット
Dim j As Integer
For j = 1 To 31
day_Combo.Items.Add(j)
Next
'メニューで選択した日付をセット
year_Combo.Text = calendar_yy
month_Combo.Text = calendar_mm
day_Combo.Text = calendar_dd

'Attentionラベルの初期化
date_Attention_Label.Text = ""
name_Attention_Lable.Text = ""
End Sub

Private Sub month_Combo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles month_Combo.SelectedIndexChanged
'月コンボをセット
calendar_mm = month_Combo.Text
ここでエラーが出力されます→ If (month_Combo.Text = 2 And day_Combo.Text = 30) Or (month_Combo.Text = 2 And day_Combo.Text = 31) _
Or (month_Combo.Text = 4 And day_Combo.Text = 31) Or (month_Combo.Text = 6 And day_Combo.Text = 31) _
Or (month_Combo.Text = 9 And day_Combo.Text = 31) Or (month_Combo.Text = 11 And day_Combo.Text = 31) Then
date_Attention_Label.Text = "日付を確認してください"
Else
Dim DAY As String
DAY = calendar_yy & "/" & calendar_mm & "/" & calendar_dd
Dim youbi As String
Dim uWeekday As DayOfWeek = CDate(DAY).DayOfWeek
youbi = WeekdayName(Weekday(DAY)).Substring(0, 3)
youbi_Label.Text = youbi
End If
End Sub

-----
見づらいコードで申し訳ありません。

引用返信 編集キー/
■62911 / inTopicNo.2)  Re[1]: コンボボックスで日付を選択したいのですが
□投稿者/ shu (1080回)-(2011/11/09(Wed) 21:57:27)
No62909 (trf さん) に返信

> 最初はエラーの出力されるif文を記述していなかったのですが、1月31日など、ありえない日を選択した時にエラーが出力されるのを防ぐための処理を施そうとした結果、こうなってしまいました。
1月31日は存在しています。


> [エラー内容]
> String "" から型 'Double' への変換は無効です。
> 自動変数を確認すると、day_Combo.textが""になっている。
> しかし、フォームのロード時に代入しているハズ…
セットされる前にイベントが発生しているだけだと思います。
SelectIndexChangedで値が""であるかチェックした方がよいと思います。


というかDateTimePickerでは駄目ですか?
引用返信 編集キー/
■62912 / inTopicNo.3)  Re[1]: コンボボックスで日付を選択したいのですが
□投稿者/ ぐっさん (18回)-(2011/11/09(Wed) 22:03:00)
No62909 (trf さん) に返信

> その結果、そのフォームへ移動すると、エラーが出力されるようになりました。

これがどのタイミングなのか分かりませんが、
このコードではフォーム初期化の段階でmonth_Combo.SelectedIndexChangedイベントが走ると思いますので、
このコードだけの対応では、このイベント発生時はday_Combo.Textが""である可能性があり、
このようなエラーになりそうです。

> 最初はエラーの出力されるif文を記述していなかったのですが、1月31日など、ありえない日を選択した時...

老婆心ながら、1月31日は存在する月日です。
引用返信 編集キー/
■62913 / inTopicNo.4)  Re[2]: コンボボックスで日付を選択したいのですが
□投稿者/ trf (8回)-(2011/11/09(Wed) 22:49:34)
返信ありがとうございます。
1月、そうですよね。疲れてるみたいです…

>shuさん
DateTimePickerですか…ちょっと調べてみます。

>ぐっさんさん

'月コンボをセット
calendar_mm = month_Combo.Text
day_Combo.text = calendar_dd '←追加

この作業により、解決しました。
こんな単純なミスにも気付けず、申し訳ありません…
ありがとうございました。
解決済み
引用返信 編集キー/
■62915 / inTopicNo.5)  Re[3]: コンボボックスで日付を選択したいのですが
□投稿者/ みきぬ (993回)-(2011/11/10(Thu) 10:52:09)
既にあがってるけど、 DateTimePicker を使ったほうがいいよ。
日付の31項目をコンボボックスから選ばせるという時点で個人的にはかなりビミョーだけども

> For i = 1990 To 2100
> year_Combo.Items.Add(i)
> Next

111項目!? 鬼でつか!?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -