• 締切済み

VB2005 Do Loopについて

VB2005 でDo Loopを使用していますが、このDo Loop内の処理をしている時にイベント(例えばボタンをクリック)が発生した場合、その処理をしたいのですがどうすれば良いでしょうか? VB6の時は、DoEventsを使用していましたが、VB2005でも使用できるのでしょうか? ご存知の方がいらっしゃいましたら、教えて頂きたいのですが。 よろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Application.DoEvents() で VB6と同等になりますよ

shimakichi
質問者

お礼

早速の回答ありがとうございました。試したところVB6と同等になりました。 今回より、初めてVB2005を使用し始め、分からない事だらけで困っています。また、分からない事があれば質問させて頂きますのでよろしくお願いします。

shimakichi
質問者

補足

redfox63様、いつもお世話になります。Application.DoEvents() で VB6と同等になりましたが、"Stack Over flow Exception はハンドルされませんでした。"、"Stack Over flow Exception のハンドルされていない例外がSystem.Windows.Forms.dllで発生しました。"と言うメッセージが出る時があります。何が悪いのか良く分かりません。原因が何なのか分かるようでしたら教えて頂きたいのですが。よろしくお願いします。

関連するQ&A

  • クラス内に自作のイベントを定義したい VB2005

    VB2005を使っています。 クラス内に自作のイベントを定義したいのですがどうすればよいのでしょうか? 非同期のソケットから帰ってきた場合に発生させるイベントです。 System.Net.Sockets.TcpClient System.Net.Sockets.NetworkStream 以下のようにループでなくイベントで処理させたいです。 Do If .DataAvailable Then             ... End If My.Application.DoEvents() Loop

  • Do..Loopステートメントの使い方について

    現在、入門書を画面で確認しながら ExcelVBAの勉強をしています。 Do...Loopで躓いてしまいました。 Do...Loopステートメントの種類は 条件を満たすまでループするもの Do Until...Loop(ループの前で条件判断) Do...Loop Until(ループの後で条件判断) 条件を満たす間はループするもの Do While...Loop(ループの前で条件判断) Do...Loop While(ループの後で条件判断) とあって、 例えば、A1からA7まで文字が入力されていて 空白のセルになるまで太文字にするとしたら、 ループの前に条件判断していると A1が空白だと処理はされず ループの後で条件判断すると A1が空白でも処理はされる とありました。 とすると、 条件判断はループ後にした方が良いと言う事なのでしょうか。 (空白でも処理してくれるので) 自分が処理したいものが ループ「後」にするのか又は ループ「前」にするのか どのように判断すれば良いのかと言うことと、 また、 条件を満たすUntil(まで)とWhile(間) どちらを使用すれば良いのかの判断方法もわかりません。 超初心者の質問内容で申し訳ありません。 VBAって面白いなぁと思い始めたところで なんとか理解したいので 教えていただけると大変助かります。 よろしくお願いします。

  • Exit Doで二つのloopを抜けるには?

    Do Do For Each If 値 = "" Then Exit Do End If Next Loop Until 条件1 Loop Until 条件2 のようなネストをした場合、Exit Doでloopを抜ける時、条件1と条件2のどちらに移動するのですか? もし条件1に移動する場合、条件2を抜けたいのならどうすればいいのでしょうか? Exit Do Do みたいな事がしたいです。

  • 『Do ~ Until (0)』の『Until (0)』

    他の人が書いたプログラムを読んでいるのですが、 そのなかで、 Do DoEvents 処理 Loop Until (0) というDo文がありました。 この(0)というのはどのような意味なのでしょうか? どのような状態になるまでLoopし続けるのでしょうか? よろしくお願いいたします。

  • 終了してもプログラムが実行したまま(VB)

    非常に時間のかかる繰り返し処理を行なうプログラムを作りました。どのくらい、プログラムが進行しているのかわかりやすくするため、 Progress.Show でProgressという名前のフォームを表示し、そこに、プログラムが何%終わったのか表示するようにしました。 プログラムはDo Loop文が使ってあるので、何%終わったのかを表示するためにLoopした回数を取得して、それをフォームに表示することにしましたが、どこかで調べたら機械は、Do Loopのあいだはフォーム上に文字を表示するのに手が回らないからDoEventsを使ってイベントを実行させなさい、といわれました。 そこまではうまくいきました。プログラムを実行すると、プログラムが実行されて何%終わったかもちゃんと表示できるようになりました。 ところが、プログラムの実行中にフォームの右上の×ボタンを押したところ、フォームは画面から消え、プログラムが終了したように見えるのに、VB Editorでは[実行中]となっており、終わってくれません。ずっとDo Loopが実行されたままです。 Private Sub Form_Terminate() のところに Unload Progress と書いても、「Unloadメソッドは使えません」などというエラー・メッセージが出ます。(フォーム上にボタンを置き、そこをクリックするとUnloadするようにしてみましたがやはり同じことを言われました。) 原因は何でしょうか? フォームをUnloadする、ということの意味をちゃんと理解していないのでいけないのだと思うのですが、調べてもよく言っていることがわかりません。 よろしくお願いします。

  • Do Loop 構文で

    エクセルVBAのDo Loop 構文で以下のような場合はどのように表記すればいいでしょうか? 変数 N は1から始まり15回処理を行うと16に変わり、また15回処理を行う。その繰り返しで31、46、61・・・と増加していきます。 N の変化の表記だけ分かればいいです。 お願いします。

  • Loopとフリーズ

    数ヶ月前からVBを始め、プログラムを組んでいる者です。 VB6.0を使用しています。 I/0ボードを用いてロボットの信号を受け取れるような環境を作りました。 『Do Until~Loop』処理で、信号を監視させているのですが、 プログラムを実行させるとCPU=100%になり、フリーズします。 『Do Until~Loop』処理の代わりになるような処理はないでしょうか? 以下に少し詳しく書き込んでおきますので、 よろしくお願いします。 信号Aは1(ON)と0(OFF)のどちらかの信号を常に出しています。 (タイミングは機械が制御しています) 信号Bも1(ON)と0(OFF)のどちらかの信号を常に出しています。 (タイミングはランダムです) <目的> 信号Aが1のとき、信号Bの信号を受け取り、 信号Aが0のとき、信号Bの信号は受け取りません。 <アルゴリズム> (1)信号Aが1になるまで『Do Until~Loop』処理を行う  待機させる (2)信号Aが0になるまで『Do Until~Loop』処理を行う  その処理の中で、信号Bの信号を常に監視させる

  • VB Loopを一時停止し再開あるいはキャンセル

    Loopで処理を回しています。処理件数が多く、処理の途中で一時停止させ、DataGridViewに表示されている処理結果を目で確認ないしマウスでコピーしてから、処理を再開ないしキャンセルして終了させる仕様を作成中です。 MessageBoxを使用すれば、Loopは一時停止出来たのですが、MessageBoxだとDataGridView上の処理結果をマウスでコピーなど出来ません。 そこで、MessageBoxを使用せずに、以下のコマンドを書いてみたのですが、最初のStopFlag=Trueが効くだけで次のコマンドは一瞬で処理されLoopが続いてしまいます。いかにすればLoopを一時停止できるか教えてください。 <変数宣言> Public StopFlag As Boolean Public CancelFlag As Boolean <前処理> TextBox1.Text = "処理待ち" 'テキストボックスに処理ステータスを表しています。 TextBox1.Refresh() <処理> Do Me.Cursor = Cursors.WaitCursor '砂時計開始 TextBox1.Text = "処理中" ’ステータスを処理中として表示 TextBox1.Refresh() ~ Application.DoEvents() 'ストップボタンを押下したらここでDoEventsさせます。 If StopFlag = True Then ’ここでLoopを一時停止させておきたいのです。 Me.Cursor = Cursors.Default '一旦砂時計を止めます TextBox1.Text = "処理一時停止" TextBox1.Refresh() If StopFlag = False Then ’再開ボタンが押下されたらここで再開させたい。 TextBox1.Text = "処理中" ’処理中と表示させます TextBox1.Refresh() Me.Cursor = Cursors.WaitCursor '砂時計再開です ElseIf CancelFlag = True Then ’キャンセルボタンが押下されれば、処理はLoopを抜けます。 TextBox1.Text = "キャンセル" TextBox1.Refresh() Exit Do End If Loop '----------ストップボタン---------- Private Sub Button2_Click~ StopFlag = True End Sub '----------再開ボタン---------- Private Sub Button3_Click~ StopFlag = False End Sub '----------キャンセルボタン---------- Private Sub Button4_Click~ CancelFlag = True End Sub この質問に補足する

  • VB.NETでのイベントの途中終了

    VB.NETで、あるボタン(button1)をクリックさせた際にイベントを発生させます。 そのイベント内の処理途中で、イベントを終了させたいと思っていますが、どのように書いていいかわからず困っています。 どなたかおわかりの方お願いします。

  • VBのイベント処理について

    お世話になります。 VB6.0のイベント処理について教えてください。 VB.NETでは、イベント処理のメソッド(VBだとプロシージャですか) のシグニチャのおしりに Handles Button1.Click という記述がされているので、このメソッドはButton1のクリックという イベントが発生したときに行われる処理だなと見当がつくのですが、 VB6.0ではその記述をしないのが一般的とみました。 してそのときに、このメソッドがButton1のクリック時のイベントだと いうのは、どのように判断されるのですか?メソッド名が Button1_Click みたいに勝手につけられるので、それで判断されるのですか?という ことはメソッド名を変えたらそのメソッドはButton1のクリック時の イベント処理メソッドではなくなってしまうのですか? よろしくご教授ください。

専門家に質問してみよう