コンボボックスについて

タグの編集
投稿者 たすく  (社会人) 投稿日時 2009/8/6 20:29:11
いつも拝見しております。
ただいま、VB6.0において、コンボボックスを使って時間計算をしております。

フォームにコンボボックスを4つ配置、テキストボックスを1つ配置。

cmb_h1  時                 cmb_m1   分
(1~24が選択可能)  (00、30が選択可能)
cmb_h2  時         cmb_m2    分
(1~24が選択可能)  (00、30が選択可能)

text1 時間


そこで質問なのですが、

cmb_h1 時   cmb_m1 分 (9:30)
(9)        (30)
cmb_h2 時   cmb_m2 分 (19:00)
(19)        (30)


と選択した際、text1には
text1
(9.5) 時間
と表示させたいのですが、どう処理をすればよいのでしょうか?

コンボボックスが2つの場合の引き算などはできたのですが、
コンボボックスが4つとなるとまったくお手上げです。

コンボボックス2つで引き算をしたときは、
変数A、B、Cを3つ作って、
cmb_h1で入力した数字を変数Aへ。
cmb_h2で入力した数字を変数Bへ。
text1にAからBを引いた変数Cを格納。
といった具合に書きました。


ただいま勉強中ですので説明不足と知識不足は否めません。
言葉足らずですみません。
なにとぞご教示のほど、よろしくお願いいたします。
投稿者 るしぇ  (社会人) 投稿日時 2009/8/6 21:53:38
時間の計算は小学校3年の算数らしいですが。。。
小数の学習が小学校4年。ということは小学校5年くらいの
算数ドリルにはあっても不思議でない内容です。
http://www.sangan.jp/grade/m61-a1.htm
VBと直接関係の無い知識については、その分野を扱った
サイトで学習することをお勧めします。

(19 - 9) + (0 - 30) ÷ 60 = 9.5

日付が変わるような計算はもう一工夫必要ですね。
投稿者 るきお  (社会人) 投稿日時 2009/8/6 22:16:27
こんにちは。
理屈はるしぇさんの式のとおりです。
VBで表現すると次のようになります。
    
Dim hour1 As Integer = cmb_h1.Text
Dim hour2 As Integer = cmb_h2.Text
Dim minute1 As Integer = cmb_m1.Text
Dim minute2 As Integer = cmb_m2.Text

'(19 - 9) + (0 - 30) ÷ 60 = 9.5 
TextBox1.Text = (hour2 - hour1) + (minute2 - minute1) / 60


VB(やC#)では日付・時刻が扱いやすいような工夫もいろいろあって、
時間の引き算はDateTime.Subtractメソッドで行うこともできます。
    
Dim time1 As Date = TimeSerial(cmb_h1.Text, cmb_m1.Text, 0)
Dim time2 As Date = TimeSerial(cmb_h2.Text, cmb_m2.Text, 0)

TextBox1.Text = time2.Subtract(time1).TotalHours


Subtractメソッドなら日付が変わってもいけますが、その場合はtime1とtime2にTimeSerialではなく、
New Date()などで日付付きで値をセットする必要があります。

なのではじめからTimeSerialなど使わずにNew Dateにして置けばよいのですが、時・分・秒だけ見るとTimeSerialの方が直感的なので上記の例では採用しました。

他にもいろいろな書き方があります。ここで紹介したのは一例です。