VB6.0にて計算機を作るには


VB初心者  2005-10-19 00:51:36  No: 126425

以下のフォームを作成し、要件を満たすものを作成する。

form1
    (text) (combo)  (text)    (text)
    txt1     cbo1    txt2  =   txt3                  
            足し算▽
            引き算
            掛け算  
                          F1      F2      F12
                       クリア    実行     終了                       
                          〔cmd(0)〜cmd(2)〕
                          (commandのコントロール配列)

要件
●フォーカス移動について

  ○「txt1」〜「txt3」,「cbo1」にフォーカスがありEnterを押下時、フォーカスを移動する。 
    txt1→cbo1→txt2→txt1

    txt3→txt1    の順に移動する。

  ○「F1クリア」ボタン押下時 
    以下の項目をクリアする。

    txt1,txt2,txt3.cbo1

「txt1」にフォーカスをセットする。

  ○「F2実行」ボタン押下時 
    エラーチェックを行い、該当箇所にフォーカスをセットする。

      ※エラーがある場合、以下の内容のダイアログ ボックスを表示する
        項目    チェック内容     エラーメッセージ 
        txt1       空白時           txt1に数字を入力してください。 
        txt1       数字以外         txt1には数字だけを入力してください。 
        cbo1       非選択時         計算を選択してください。 
        txt2       空白時           txt2に数字を入力してください。 
        txt2       数字以外         txt2には数字だけを入力してください。 

  
      「txt3」に計算結果を表示する。

  ○「F12終了」ボタン押下時
    プログラムを終了する。

●コントロールの設定について
コマンドボタン(「F1クリア」「F2実行」「F12終了」)をコントロール配列にて作成する。

「txt3」は入力不可

「txt1」、「txt2」

    IME半角固定

    最大4桁まで入力可能(小数点以下含む)

●ファンクションキーの対応について
  キーボード上のファンクションキーを押下すると、
  下記に対応するボタン押下時処理と同様の処理をする。

  F1 F1クリアボタン 
  F2 F2実行ボタン 
  F12 F12終了ボタン 

●使用する関数、プロバティなど
  IsNumeric関数 
  MsgBox関数 
  MaxLengthプロパティ 
  Lockedプロパティ 
  KeyPreviewプロパティ 
  SetFocusメソッド 
  KeyDownイベント 
  Index 
  コントロール配列

以上、お願いいたします。


VB初心者  2005-10-19 00:53:28  No: 126426

現在、製作中のソースはこのような感じになっております。
(ほとんど出来ていませんが・・・)
Option Explicit

Private Sub Cmd_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)

End Sub

Private Sub Form_Load()
    Cbo1.AddItem "足し算"
    Cbo1.AddItem "引き算"
    Cbo1.AddItem "掛け算"

End Sub


はぁ・・・  2005-10-19 01:00:00  No: 126427

>以下のフォームを作成し、要件を満たすものを作成する。
>(中略)
>以上、お願いいたします。

課題は自分の力で解きましょう。


VB初心者  2005-10-19 01:03:12  No: 126428

何か、ヒントかコツだけおねがいします


VB初心者  2005-10-19 01:10:36  No: 126429

ちなみに、個別のイベントプロシージャを作ってするやり方ではできたのですが、
コントロール配列を使ってするやり方がよくわかりません。


はぁ・・・  2005-10-19 01:10:40  No: 126430

ヒントを探すのも勉強のうちです。

・・・ではかわいそうなので。

「VB」「計算機」でググってみてください。
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=VB+%E8%A8%88%E7%AE%97%E6%A9%9F&num=50
検索結果の真ん中くらいに「VBプログラムサンプル集」というサイトがヒットしますのでそちらを参考にがんばってみてください。


はぁ・・・  2005-10-19 01:19:10  No: 126431

後学のためにこのようなページはいかがですか?
http://www.g.dendai.ac.jp/lecture/vbasic/
コントロール配列の事も書かれてますよ。


VB初心者  2005-10-19 01:26:48  No: 126432

ありがとうございます。かなり参考になりそうなページです。
なんとか、やってみようと思います。


名無し  2005-10-19 01:51:18  No: 126433

仕様書?発注?いくら出します?wwww

安く見積もって100万くらいなら引き受けますけどw


はぁ・・・  2005-10-19 02:02:22  No: 126434

自力で頑張るように誘導したのですから横槍を入れないでください。


VB初心者  2005-10-19 21:23:20  No: 126435

あ〜、やっぱりうまくいきません。
プログラミングって、センスとかも必要なんでしょうか?


はぁ・・・改めヘキサ  2005-10-19 21:41:26  No: 126436

>あ〜、やっぱりうまくいきません。
うまくいかないところってどこですか?
やはりコントロール配列ですか?

>プログラミングって、センスとかも必要なんでしょうか?
まぁセンスも必要だとは思いますけど、それが全てではないでしょう。
一番必要だと思うのは向上心だと思ってます。


もげ  2005-10-19 22:06:05  No: 126437

ネット上にいくらでもサンプルが転がってるんですから、
やる気と、ちょっとの情報収集と応用力があれば可能でしょう。
あとは、
「やっぱりうまくいきません。」では助けようが無いので、
5W1Hっていうか、どんなコードを書いていて何がどううまくいってないか
を具体的客観的に表してみましょう。
そうすれば、誰か助けてくれるかもしれない。
コミュニティから援護をもらえるかどうかはソコにかかっています。

ちなみにコントロール配列ボタンだと、
Index引数を使って処理を分岐するのはよくあるけど、
そんなところでつまづくかな..。
この程度の課題ならセンスも糞もないです。
逆に、この程度でセンス云々を持ち出す時点で
「貴殿にはセンスが無い」と断言してもいいけど(^^;。

Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
    '1個目のボタンを押された場合の処理
Case 1
    '2個目のボタンを押された場合の処理
Case 2
    '3個目のボタンを押された場合の処理
End Select
End Sub


いな  2005-10-19 22:20:01  No: 126438

>プログラミングって、センスとかも必要なんでしょうか?

プログラミングを書くことへの慣れ
といったものは必要かもしれないけれど
こういった課題って、学習したことの積み重ねだから、
センス云々以前の話で関係ないと思う。

「うまくいかない」では正直、何がどう上手くいかないのか?
また、何処でつまずいているのか?という情報が委細ないので、
正直こたえられる人はいないとおもう。


ヘキサ  2005-10-19 22:28:40  No: 126439

もげさんが提示されたソースですべて解決かと。

以前に紹介したページにそのものズバリの項目があるのですが。。。
見ていただいてますか?>VB初心者さん
その15  コントロール配列
http://www.g.dendai.ac.jp/lecture/vbasic/vb15.html

あとはVB初心者の努力次第です。


ヘキサ  2005-10-19 22:29:24  No: 126440

>VB初心者さん
敬称略失礼しました。


マグ  2005-10-20 02:28:36  No: 126441

センスではなく、アイディアだと思いますよ。
それに、課題は他人に聞かずに自力で解くものだと思いますが(^^;)

あと、自分で調べるのも勉強だと思います。
調べることが出来ないというのはありませんし・・・・・・・
レスの一番、最初に「使用する関数、プロバティなど」と書かれている時点で・・・・・・
それを対象に検索をかければ、いくらでも調べられたハズ・・・・・・・

ほかに、何処が原因かを調べる方法を見つけるのも今後のための勉強になりますし・・・・・・
出来なかったり、不具合が生じた場合、それに対しての修正・予定変更も勉強になりますよ。

ってかこれ、なんの職業においても、かなり必要と言われるほどめちゃくちゃ重要です。
絶対、避けられないことですので・・・・・・・・・・

コントロール配列はいきなり、やるのではなく、配列をまず、先に自由自在に操作できるようにしたほうがいいと思います。
配列だけでも、初めのうちはかなり、手こずりますから・・・・・・・
それから、コントロール配列を勉強した方が楽に覚えられます。

一番、重要なのは何に対しても急がないことです。
急ぐと判断を誤りますからね。


VB初心者  2005-10-21 20:50:10  No: 126442

現在はこんな感じなのですが、ファンクションキーの割り当てがうまくいきません。
F1キーしか割り当てられていないようです。

Option Explicit
Private Sub Form_Load()
    Cbo1.AddItem "足し算"
    Cbo1.AddItem "引き算"
    Cbo1.AddItem "掛け算"

End Sub
Private Sub cmd_Click(Index As Integer)
Select Case Index
Case 0
    Txt1.Text = ""
    Txt2.Text = ""
    Txt3.Text = ""
    Cbo1 = ""
    Txt1.SetFocus
Case 1
    Select Case Cbo1.ListIndex
        Case 0
            Txt3.Text = CStr(CInt(Txt1.Text) + CInt(Txt2.Text))
        Case 1
            Txt3.Text = CStr(CInt(Txt1.Text) - CInt(Txt2.Text))
        Case 2
            Txt3.Text = CStr(CInt(Txt1.Text) * CInt(Txt2.Text))
    End Select
Case 2
    End
End Select
End Sub

Private Sub Cmd_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
    Case vbKeyF1
    Cmd(0) = vbKeyF1
    Case vbKeyF2
    Cmd(1) = vbKeyF2
    Case vbKeyF12
    Cmd(2) = vbKeyF12
End Select
End Sub


GOD  2005-10-21 21:43:19  No: 126443

Case vbKeyF1
        Cmd(0).Value = 1
とか
    Case vbKeyF1
        call cmd_Click(0)
とか


VB初心者  2005-10-24 19:18:52  No: 126444

やっぱりわかりません。
誰かに聞きたくても、まわりに教えてくれる人がいないので、
この掲示板で聞いているみたいな感じです。


VB初心者  2005-10-25 01:12:01  No: 126445

コード自体が間違っているわけでわないのはわかったのですが、
どのように書き直せばいいのかがわかりません。


いな  2005-10-25 02:21:57  No: 126446

周りに教えてくれる人が居ないというのはともかく。
> まず、ファンクションキーの割り当てがうまくいきません。
> F1キーしか割り当てられていないようです。

ようです・・・。って推測で物を判断するのは、早計
まずはF1、F2、F3をそれぞれ押下したときの動きを、ステップ実行
してみて動きを見ることからはじめようよ。

私ならば、KeyPreview をTrueにしてFormのKeyDown、KeyPressイベントに書いてしまうけどなぁ

Private Sub Cmd_KeyDown〜(略


ヘキサ  2005-10-25 02:38:21  No: 126447

VB初心者さんの
>VB初心者 2005/10/21(金) 11:50:10
で提示されたコードではF1キーの割り当ても出来ませんでした(自分だけか?)

まとめて解決しようとせずに、問題点を一つずつ挙げていって、
それを一つずつ潰していかないといつまでたっても終わりませんよ。

まず、問題点(出来ていないところ、分からないところ)を箇条書きにしてみては?


いな  2005-10-25 03:24:24  No: 126448

Select Case KeyCode
    Case vbKeyF1
        Call cmd_Click(0)
    Case vbKeyF2
        Call cmd_Click(1)
    Case vbKeyF12
        Call cmd_Click(2)
    End Select
のような気がする・・・。って既に"GOD"さんが指摘しているけどね。
それでも、どのように書き直せばいいのかがわかりません。
なんだよね?


ななし  2005-10-25 03:43:48  No: 126449

Option Explicit

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
    Case vbKeyF1
        Call cmd_Click(0)
    Case vbKeyF2
        Call cmd_Click(1)
    Case vbKeyF12
        Call cmd_Click(2)
    End Select
End Sub

Private Sub Form_Load()
    'オブジェクトのキーイベントよりフォームのキーイベントを先に実行させます。
    Form1.KeyPreview = True
    Cbo1.AddItem "足し算"
    Cbo1.AddItem "引き算"
    Cbo1.AddItem "掛け算"
End Sub
Private Sub cmd_Click(Index As Integer)
    Select Case Index
        Case 0
            Txt1.Text = ""
            Txt2.Text = ""
            Txt3.Text = ""
            'コンボボックスの中身をクリアするときは通常このように書きます!!
            Cbo1.ListIndex = -1
            Txt1.SetFocus
        Case 1
            Select Case Cbo1.ListIndex
                Case 0
                    Txt3.Text = CStr(CInt(Txt1.Text) + CInt(Txt2.Text))
                Case 1
                    Txt3.Text = CStr(CInt(Txt1.Text) - CInt(Txt2.Text))
                Case 2
                    Txt3.Text = CStr(CInt(Txt1.Text) * CInt(Txt2.Text))
            End Select
        Case 2
            'Endは強制終了なので、極力使わないようにしましょう。
            'フォームのアンロードというような処理にします。
            Unload Form1
    End Select
End Sub


VB初心者  2005-10-25 06:24:27  No: 126450

みなさん、ありがとうございます。ここまではうまくいきました。
あと、フォーカス移動がうまくいきません。プロパティから変えられるのでしょうか?以下のようにうごかしたいのですが。
  ○「txt1」〜「txt3」,「cbo1」にフォーカスがありEnterを押下時、フォーカスを移動する。 
    txt1→cbo1→txt2→txt1→txt3→txt1    の順に移動する。

それと、Msgbox関数もよくわからないのですが。
このようなメッセージを出したいのですが。
  ○「F2実行」ボタン押下時 
    エラーチェックを行い、該当箇所にフォーカスをセットする。

      ※エラーがある場合、以下の内容のダイアログ ボックスを表示する
        項目    チェック内容     エラーメッセージ 
        txt1       空白時           txt1に数字を入力してください。 
        txt1       数字以外         txt1には数字だけを入力してください。
        cbo1       非選択時         計算を選択してください。 
        txt2       空白時           txt2に数字を入力してください。 
        txt2       数字以外         txt2には数字だけを入力してください。


VB初心者  2005-10-25 06:27:56  No: 126451

ちなみにフォーカス移動に関しては
txt1→cbo1→txt2→txt3→txt1
というふうにはプロパティの設定でできたのですが、
txt1→cbo1→txt2→txt1→txt3→txt1
というふうにはいきません。txt1に二回通すやり方がわかりません。


ななし  2005-10-25 08:16:37  No: 126452

> みなさん、ありがとうございます。ここまではうまくいきました。
上手くいきました、、、じゃなくて、なぜそう動くのか?
理解してください。理解もせずに次に行こうとするのは誤りです。
なにか誤解しているようだけれども
上手くいったのではなく、コピーしただけでしょ?

> というふうにはいきません。txt1に二回通すやり方がわかりません。

レスに甘えを感じるのでそこまでは付き合えない。
「ステップ実行」を行い地道に追いましょう!

二回通すように、ステップ実行で追いましょう!
努力しているように見えたら、次も回答を考えなくもない。


Sin  2005-10-25 08:21:35  No: 126453

変数を使えばいいのではないでしょうか。
例えば、
①フォーカスがcbo1へ移動されたら変数AをTrueにする。
②txt1からフォーカスを移動させるときに変数AがTrueならtxt3へ、
  変数AがFalseならcbo1へフォーカスを移動させる。
という風にすれば解決すると思います。


ぶぶ  2005-10-25 08:40:40  No: 126454

>それと、Msgbox関数もよくわからないのですが。
関数がわかっているのならば、ヘルプなり見ればサンプルは乗っているはず。
それでもわからないときは、どこがどうわからないのか。
どこまで理解しているのか。それを記入しなければ、丸投げにとられますよ。

フォーカスを移すのはsetfocusを使ってください。

>このようなメッセージを出したいのですが。
>  ○「F2実行」ボタン押下時 
>    エラーチェックを行い、該当箇所にフォーカスをセットする。
>
>      ※エラーがある場合、以下の内容のダイアログ ボックスを表示する
>        項目    チェック内容     エラーメッセージ 
>        txt1       空白時           txt1に数字を入力してください。 
>        txt1       数字以外         txt1には数字だけを入力してくださ>い。
>        cbo1       非選択時         計算を選択してください。 
>        txt2       空白時           txt2に数字を入力してください。 
>        txt2       数字以外         txt2には数字だけを入力してくださ>い。 
これこのままIf文になおせばいいんでは????


通りすがり  2005-10-25 17:52:00  No: 126455

ここまで仕様がわかっていてコードが書けないってことは、
そもそもプログラマ(コーダ)ではなくプログラムマネージャの方が向いているのかもしれません。

http://japanese.joelonsoftware.com/Articles/PainlessFunctionalSpecifi-2.html


七誌  2005-10-25 18:14:47  No: 126456

>プログラムマネージャー
一理ありますね。
学校の先生に、「この掲示板にいるプログラマーに書かせ、見事計算機を作りました。マネージメント成功です!」
と大手を振ってアピールしてみては。
もしかすると電車男ならぬ、VB初心者男としてドラマ化されるかも。


名無しさん  2005-10-25 19:33:23  No: 126457

VB初心者男  キタ━━━━(゜∀゜)━━━━ッ!!


ななし  2005-10-25 19:33:32  No: 126458

電車男は成長の証がみれたが?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加