お世話になっております。
Visual Basic6.0を使用して表示板を製作しています。まだまだプログラムレベルが低いので
ご教示ください。
外部信号を受け取ったらText Boxの値に+1します。外部信号(0 or 1)受け取りはできたので、
カウントアップの仕方を教えてください。
スタート ⇒ トリガーが入ったらカウントアップ ⇒ トリガーが入ったらカウントアップ ⇒
終了ボタン押すまで繰り返します。
トリガー : dioInpDataが0か1が入力される
スタート、終了はボタン押下
Praivate Sub START Click()
Dim dioInpData as string
Dim i as string
i = 0
If dioInpData = 1Then
Text1.text = i + 1
End If
End sub
これだと、以下の問題が。。。
・スタートボタン押したらdioInpData一回確認したら終わってしまう。
・i = 0から始まるから常に1を表示していまう。
これまでボタン押下で一回処理で終了するプログラムしか組んでないので、
何回もトリガーが入ったら処理する、カウントアップの処理が初めてです。
自分で書いてて悲しくなりますが、こんなこともわからないんです。
どなたか教えてください。
何卒、よろしくお願いいたします。
No.7ベストアンサー
- 回答日時:
●ありゃー
案4の型が・・・
Text1.Text = CStr(1 + CLng(Text1.Text))
かも(/∇≦\)
●残り
プロシージャ内で宣言された dioInpData にいつ値が渡されているのかという疑問は残るが
(本来のコードでは別の場所で宣言、値が渡されているのかな?)
残りはumekihajimeさんのヒントの通りかと
1.タイマーコントロールで一定間隔毎に dioInpData の値を調べ→それなりの処理
2.dioInpData の値が設定された時に、同時にText1.Textの値を設定する。
または、Text1.Textの値を設定する処理が書かれたプロシージャを呼び出す。
簡単に思いつく外部信号の受け取り方法は2種類(他にもあるかも)
1:(カスタム)コントロールのイベント(またはプロパティ値を参照?)
2:コールバック関数が呼び出されている
AddressOf 演算子で関数アドレスを取得、これを外部APIに渡しコールバックさせる。
コールバック関数はフォーム、クラス、に書かれたコードだと
インスタンシングされたりメモリから削除されたりするため標準モジュールにしか書けない。
なのでこの方法の場合は標準モジュールのコードを調べる。
あと、昔VBマガジンに裏ワザで変数アドレスが使用できるとか書いてあった気がしたけど
やりかた覚えてないな・・・
タイマーで一定間隔にチェックしてdioInputDataが1のときにカウントアップして、別のタイムアップするまで繰り返すでできました!
ありがとうございました。
またよろしくお願い致します。
No.8
- 回答日時:
トリガーが入ったときにイベント起動できない場合の繰り返し処理には幾つか方法が有ります。
for ... next (回数指定の繰り返し)
Do ... loop (一定の条件が満たされるまでの繰り返し)
timer コントロールを使った方法 (一定時間になったらのくりかえし)
No.6
- 回答日時:
コメント抜きで、
Option Explicit
Dim i As Long
Praivate Sub START_Click()
If dioInpData = 1 Then
i = i + 1
End If
Text1.Text = i
End Sub
Private Sub Form_Load()
Text1.Text = 0
End Sub
No.5
- 回答日時:
ヒントを2つ
外部信号を受け取る部分は、信号が変化するとイベントが発生する仕組みですか?
そうでなければ、タイマーコントロールの使い方を調べて見てください。
newの値の変化を判断する方法は、
if old <> new then
old = new
call 値が変化した時の処理
end if
頑張ってください。
No.4
- 回答日時:
VB6の環境はもう無いので確認できないけど思ったことだけ
一見STARTという名前を付けたボタンかなにかのクリックイベントの処理に見えたが
× Praivate Sub START Click()
? Private Sub START_Click()
この時点でエラーにならない?
Dim i as string
i = 0
型を理解していないと思う(VB6ではエラーにならなかったと思うが)
Dim i As String ならば文字列型なので
i = "0" になる
しかしカウンタとして i を使用するならふつうは
Dim i As Long または
Dim i As Integer とするだろう
Dim dioInpData as stringも同様
解決案
案1:i をStaticで静的変数として宣言する。i = 0は余計。変数の初期化時には、数値変数は 0 に初期化されるだろう。
案2:i をプロシージャの外部でモジュールレベルのメンバ変数として宣言する。
案3:i をプロジェクト内で参照できるGlobal(Publicだっけ?)変数として宣言する。
案4:Text1.Textの内容が数値として評価できることが保証されるなら、そのままカウンタとして使用する。
Text1.Text = 1 + CLng(Text1.Text)
>・スタートボタン押したらdioInpData一回確認したら終わってしまう。
>外部信号を受け取ったらText Boxの値に+1します。外部信号(0 or 1)受け取りはできたので、
コードはスタートボタンのクリックイベント?
外部信号(0 or 1)を受け取った時にプロシージャを呼び出すようにしないとだめだと思う。
No.2
- 回答日時:
ひとまず今のソースを使った方法を示します。
formloadイベント等で、Text1.text = "0"としておいてください。
後は Text1.text = i + 1の部分をText1.text = val(Text1.text) + 1 としてください。
No.1
- 回答日時:
これではスタートボタンを押して End sub まで処理を行って終了ですよね?
外部信号がどのようにして渡してあるのかは分かりませんが
画面を用意して、トリガーを受け取ったら +1する処理を行う。
そして画面表示で待機するように作らないよダメですよ
もう少し頑張ってみてください^^b
storm-rider様
ありがとうございます。
umekihajimeさんの回答で+1の処理がなんとかなりそうです。
トリガーを受け取るよう待機するというのが、コードが
思いつきません。
もう少しヒントいただけますか!?
もちろん、明日自分で頑張ります!
明日にでもまたOK wave見に来ます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
-
4
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF文に時間(何時から何時ま...
-
【C#/Java?】try-catchでcatch...
-
ExcelのVBAで、選択したファイ...
-
マクロで、次のコードへ行く前...
-
特定の名前のオートシェイプの...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
private subモジュールを他のモ...
-
どう増強すべきか
-
エクセル VBAで複数セル選択時...
-
VB6のロストフォーカス時の処理...
-
VB.NET SPRED(チェックボック...
-
起動しているIEをVBSで閉じると...
-
特定のファイルを他のプロセス...
-
ListViewから選択中の文字列を取得
-
winsockの非同期処理について
-
順番に処理させたい
-
タイマーの使い方
-
Form オブジェクトの戻り値の設定
-
c# の try の入れ子
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
Excel VBA セルの名前があるか...
-
特定の名前のオートシェイプの...
-
どうやってもFor文を抜けてしま...
-
特定のファイルを他のプロセス...
-
ExcelのVBAで、選択したファイ...
-
VB6にてネットワーク上にある共...
-
VBA 複数の行を高速で削除する...
-
Word VBA。各マクロの間に待ち...
-
フォルダのアクセス権確認について
-
エクセル VBAで複数セル選択時...
-
VBA For Each 〜 複数条件について
-
【C#】Page_Loadさせない方法に...
-
StatusStripの表示が更新されな...
おすすめ情報