チャックボックスにチェックが入ったらLoopが開始されるというプログラムを組んだんですが、これをやるとチェックボックスのチェックがはずせなくなります。
わかった方は教えてください。お願いします
なぞなぞか………………
縦読みしてもわからないので、逆に質問。
・イベント駆動プログラムを組んだことはありますか?
{ある,ない}のいずれかで答えてください。
・DoEventsの役割を説明してください。
簡潔に答えられれば、それで大丈夫です。
※一応ヒントだぉ…
無限ループ?
もしかして、for文の無限ループ?
色々と方法はありますが・・・・・
1、ガッさんの言うとおりの方法。
2、ループ処理にTimerを使う。
3、スレッドを使う。
返信ありがとうございました。
ない。 はじめてです
よくわからないのですが、CPUに負担をかけるとほかのイベントが実行できなくなるから、DoEventsをつかって制御を渡す。だと思ってます
DoEventsはループの初めに入れてあります。
一応 Whileを使ってLoopから出れるようにしてあるんですが、そのチェックボックスだけ動いてくれません。
Timerは使いたくないです。スレッドもわかりませんし...
チェックボックスのクリックイベント内でチェックボックスのValueを1にしてるとかないですよねぇ・・・
> GGXX 2005/07/10(日) 13:03:37
> 返信ありがとうございました。
>
> ない。 はじめてです
> よくわからないのですが、CPUに負担をかけるとほかのイベントが実行できなくなるから、DoEventsをつかって制御を渡す。だと思ってます
少し(見方によっては全く)違いますが、イベントを処理するという点ではそんな感じです。
逆に言えば、DoEventsを行うことにより「発生させたくないイベント」も処理されてしまうということです。
> DoEventsはループの初めに入れてあります。
ループの初め(≠始め)というと、
[e1]ループ直前に一回ということですか?
→"DoEvents:Do:Loop"見たいな。
→この場合、ループ中はイベントは処理されません。VB6なら、ユーザ側から見るとビジー状態に見えます。
[e2]それとも、ループ中に一回ということですか?
→"Do:DoEvents:Loop"
→この場合、ループ中でもイベントを処理しますが、CPUを使いまくりです。その上、発生させたくないイベントも処理されます。
> 一応 Whileを使ってLoopから出れるようにしてあるんですが、そのチェックボックスだけ動いてくれません。
「動く」とは、何を期待しているのでしょうか?
・チェックボックスにチェックが入る
→[e1]の場合、イベントは処理されませんので、チェックボックスの処理もされません。
→[e2]の場合、イベントは処理されますが、「チェックボックスのイベントの処理」に「チェックボックスのイベントの処理」がされますので、
内部では、再帰呼び出し(の様)になります。
最悪、スタックオーバーフローが発生するかもしれません。
> Timerは使いたくないです。スレッドもわかりませんし...
なぜTimerを使いたくないのですか?
また、(.NETなら)スレッドを検討したほうがいいかもしれませんよ?
無限ループでの処理はCPUを100%(限界)まで使用します。
Timerの場合は1msでCPUを10%程度で済みますが・・・・・
なぜ、Timerを使いたくないのかが分かりません。
スレッドに関しては、計ってないので、分かりません。
質問者の質問の意図は明確ですね。
フォームの上にチェックの付いていない、チェックボックスを一つ置いて
Private Sub Check1_Click()
Do
DoEvents
If Check1.Value = 0 Then
Exit Do
Else
'do something
End If
Loop
End Sub
これを実行してチェックを入れると、2度とループを抜けません。
実行がCheck1_Click()のイベント処理中は、新しいCheck1_Click()イベントが
起きない為です。従って、Check1_Click()の中では処理中に、再びチェックボックスが
クリックされる様な、時間のかかる処理は原則出来ません。
プログラムの構成を再考する必要が有ります。
ツイート | ![]() |