以下のフォームを作成し、要件を満たすものを作成する。
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
コントロール配列
以上、お願いいたします。
現在、製作中のソースはこのような感じになっております。
(ほとんど出来ていませんが・・・)
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
>以下のフォームを作成し、要件を満たすものを作成する。
>(中略)
>以上、お願いいたします。
課題は自分の力で解きましょう。
何か、ヒントかコツだけおねがいします
ちなみに、個別のイベントプロシージャを作ってするやり方ではできたのですが、
コントロール配列を使ってするやり方がよくわかりません。
ヒントを探すのも勉強のうちです。
・・・ではかわいそうなので。
「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プログラムサンプル集」というサイトがヒットしますのでそちらを参考にがんばってみてください。
後学のためにこのようなページはいかがですか?
http://www.g.dendai.ac.jp/lecture/vbasic/
コントロール配列の事も書かれてますよ。
ありがとうございます。かなり参考になりそうなページです。
なんとか、やってみようと思います。
仕様書?発注?いくら出します?wwww
安く見積もって100万くらいなら引き受けますけどw
自力で頑張るように誘導したのですから横槍を入れないでください。
あ〜、やっぱりうまくいきません。
プログラミングって、センスとかも必要なんでしょうか?
>あ〜、やっぱりうまくいきません。
うまくいかないところってどこですか?
やはりコントロール配列ですか?
>プログラミングって、センスとかも必要なんでしょうか?
まぁセンスも必要だとは思いますけど、それが全てではないでしょう。
一番必要だと思うのは向上心だと思ってます。
ネット上にいくらでもサンプルが転がってるんですから、
やる気と、ちょっとの情報収集と応用力があれば可能でしょう。
あとは、
「やっぱりうまくいきません。」では助けようが無いので、
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
>プログラミングって、センスとかも必要なんでしょうか?
プログラミングを書くことへの慣れ
といったものは必要かもしれないけれど
こういった課題って、学習したことの積み重ねだから、
センス云々以前の話で関係ないと思う。
「うまくいかない」では正直、何がどう上手くいかないのか?
また、何処でつまずいているのか?という情報が委細ないので、
正直こたえられる人はいないとおもう。
もげさんが提示されたソースですべて解決かと。
以前に紹介したページにそのものズバリの項目があるのですが。。。
見ていただいてますか?>VB初心者さん
その15 コントロール配列
http://www.g.dendai.ac.jp/lecture/vbasic/vb15.html
あとはVB初心者の努力次第です。
>VB初心者さん
敬称略失礼しました。
センスではなく、アイディアだと思いますよ。
それに、課題は他人に聞かずに自力で解くものだと思いますが(^^;)
あと、自分で調べるのも勉強だと思います。
調べることが出来ないというのはありませんし・・・・・・・
レスの一番、最初に「使用する関数、プロバティなど」と書かれている時点で・・・・・・
それを対象に検索をかければ、いくらでも調べられたハズ・・・・・・・
ほかに、何処が原因かを調べる方法を見つけるのも今後のための勉強になりますし・・・・・・
出来なかったり、不具合が生じた場合、それに対しての修正・予定変更も勉強になりますよ。
↑
ってかこれ、なんの職業においても、かなり必要と言われるほどめちゃくちゃ重要です。
絶対、避けられないことですので・・・・・・・・・・
コントロール配列はいきなり、やるのではなく、配列をまず、先に自由自在に操作できるようにしたほうがいいと思います。
配列だけでも、初めのうちはかなり、手こずりますから・・・・・・・
それから、コントロール配列を勉強した方が楽に覚えられます。
一番、重要なのは何に対しても急がないことです。
急ぐと判断を誤りますからね。
現在はこんな感じなのですが、ファンクションキーの割り当てがうまくいきません。
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
Case vbKeyF1
Cmd(0).Value = 1
とか
Case vbKeyF1
call cmd_Click(0)
とか
やっぱりわかりません。
誰かに聞きたくても、まわりに教えてくれる人がいないので、
この掲示板で聞いているみたいな感じです。
コード自体が間違っているわけでわないのはわかったのですが、
どのように書き直せばいいのかがわかりません。
周りに教えてくれる人が居ないというのはともかく。
> まず、ファンクションキーの割り当てがうまくいきません。
> F1キーしか割り当てられていないようです。
ようです・・・。って推測で物を判断するのは、早計
まずはF1、F2、F3をそれぞれ押下したときの動きを、ステップ実行
してみて動きを見ることからはじめようよ。
私ならば、KeyPreview をTrueにしてFormのKeyDown、KeyPressイベントに書いてしまうけどなぁ
Private Sub Cmd_KeyDown〜(略
VB初心者さんの
>VB初心者 2005/10/21(金) 11:50:10
で提示されたコードではF1キーの割り当ても出来ませんでした(自分だけか?)
まとめて解決しようとせずに、問題点を一つずつ挙げていって、
それを一つずつ潰していかないといつまでたっても終わりませんよ。
まず、問題点(出来ていないところ、分からないところ)を箇条書きにしてみては?
Select Case KeyCode
Case vbKeyF1
Call cmd_Click(0)
Case vbKeyF2
Call cmd_Click(1)
Case vbKeyF12
Call cmd_Click(2)
End Select
のような気がする・・・。って既に"GOD"さんが指摘しているけどね。
それでも、どのように書き直せばいいのかがわかりません。
なんだよね?
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
みなさん、ありがとうございます。ここまではうまくいきました。
あと、フォーカス移動がうまくいきません。プロパティから変えられるのでしょうか?以下のようにうごかしたいのですが。
○「txt1」〜「txt3」,「cbo1」にフォーカスがありEnterを押下時、フォーカスを移動する。
txt1→cbo1→txt2→txt1→txt3→txt1 の順に移動する。
それと、Msgbox関数もよくわからないのですが。
このようなメッセージを出したいのですが。
○「F2実行」ボタン押下時
エラーチェックを行い、該当箇所にフォーカスをセットする。
※エラーがある場合、以下の内容のダイアログ ボックスを表示する
項目 チェック内容 エラーメッセージ
txt1 空白時 txt1に数字を入力してください。
txt1 数字以外 txt1には数字だけを入力してください。
cbo1 非選択時 計算を選択してください。
txt2 空白時 txt2に数字を入力してください。
txt2 数字以外 txt2には数字だけを入力してください。
ちなみにフォーカス移動に関しては
txt1→cbo1→txt2→txt3→txt1
というふうにはプロパティの設定でできたのですが、
txt1→cbo1→txt2→txt1→txt3→txt1
というふうにはいきません。txt1に二回通すやり方がわかりません。
> みなさん、ありがとうございます。ここまではうまくいきました。
上手くいきました、、、じゃなくて、なぜそう動くのか?
理解してください。理解もせずに次に行こうとするのは誤りです。
なにか誤解しているようだけれども
上手くいったのではなく、コピーしただけでしょ?
> というふうにはいきません。txt1に二回通すやり方がわかりません。
レスに甘えを感じるのでそこまでは付き合えない。
「ステップ実行」を行い地道に追いましょう!
二回通すように、ステップ実行で追いましょう!
努力しているように見えたら、次も回答を考えなくもない。
変数を使えばいいのではないでしょうか。
例えば、
①フォーカスがcbo1へ移動されたら変数AをTrueにする。
②txt1からフォーカスを移動させるときに変数AがTrueならtxt3へ、
変数AがFalseならcbo1へフォーカスを移動させる。
という風にすれば解決すると思います。
>それと、Msgbox関数もよくわからないのですが。
関数がわかっているのならば、ヘルプなり見ればサンプルは乗っているはず。
それでもわからないときは、どこがどうわからないのか。
どこまで理解しているのか。それを記入しなければ、丸投げにとられますよ。
フォーカスを移すのはsetfocusを使ってください。
>このようなメッセージを出したいのですが。
> ○「F2実行」ボタン押下時
> エラーチェックを行い、該当箇所にフォーカスをセットする。
>
> ※エラーがある場合、以下の内容のダイアログ ボックスを表示する
> 項目 チェック内容 エラーメッセージ
> txt1 空白時 txt1に数字を入力してください。
> txt1 数字以外 txt1には数字だけを入力してくださ>い。
> cbo1 非選択時 計算を選択してください。
> txt2 空白時 txt2に数字を入力してください。
> txt2 数字以外 txt2には数字だけを入力してくださ>い。
これこのままIf文になおせばいいんでは????
ここまで仕様がわかっていてコードが書けないってことは、
そもそもプログラマ(コーダ)ではなくプログラムマネージャの方が向いているのかもしれません。
http://japanese.joelonsoftware.com/Articles/PainlessFunctionalSpecifi-2.html
>プログラムマネージャー
一理ありますね。
学校の先生に、「この掲示板にいるプログラマーに書かせ、見事計算機を作りました。マネージメント成功です!」
と大手を振ってアピールしてみては。
もしかすると電車男ならぬ、VB初心者男としてドラマ化されるかも。
VB初心者男 キタ━━━━(゜∀゜)━━━━ッ!!
電車男は成長の証がみれたが?
ツイート | ![]() |