DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MSGBOXを使うとフォームにロックがかかる

環境/言語:[VB2005 Windows XP]
分類:[.NET]

VB2005でWebbrowserを用いて簡単な自動入力システムを作っています。

流れはこんな感じです。

1.複数のURLを順番にオープンする。
2.オープンしたURLにはそれぞれ数個のインプット項目があり、VBで値を自動入力させる。
3.1つのURLのインプット項目の自動入力が終わったら、目視でチェックし、必要な場合は手作業で修正する。
4.次のURLをオープンし、2,3を繰り返す。

上記はループで回しているのですが、3と4の間にMSGBOXをはさんで、OKボタンを押さないと、次のURLがオープンできないようにしています。
これは、目視チェック、手動での修正作業が必要だからです。

ところがここで問題が起こりました。

MSGBOXを出している間は、フォーム(Webbrowser)にロックがかかり、入力作業が行えないのです。

これを回避する方法を教えていただけませんでしょうか。

または、MSGBOXを3と4の間にはさむのは、そもそも無理があるのでしょうか。。


どうぞよろしくお願いします。
■No21756に返信(まささんの記事)

> または、MSGBOXを3と4の間にはさむのは、そもそも無理があるのでしょうか。。

そもそも無理です。
MSGBOX(MessageBox.Show) はモーダル表示ですから、それが閉じられるまで表示元の
フォームが動かないのは当然です。そういうものです。

この場合はフォームに「次へ」などのボタンを用意して、そのボタンを押すことで
次のURLをオープンするようにすればいいのではないでしょうか。
ぽぴ王子さん、コメントありがとうございます。

やはりMSGBOXは使えず、ボタンを用意する必要があるのですね。

その方向でプログラムを修正し始めたのでが、また壁にあたりました。


プログラムのおおまかな流れ

for i = 1 to 10

A.i番目のURLをオープンする
B.i番目のURLの画面に自動入力する
C.目視チェックの為に処理を停止させる
D.「再開」ボタンをクリックしたら処理を再開させる

next


上記の、C,Dをどのように記述していいのかわかりません。

私の考えでは、

1から600まで秒をカウントする
「再開」ボタンがクリックされたら秒をカウントするループを抜ける

このような考えでよろしいでしょうか。
また、他に良い考えはないでしょうか。


どうぞよろしくお願いします。


> プログラムのおおまかな流れ
>
> for i = 1 to 10
>
> A.i番目のURLをオープンする
> B.i番目のURLの画面に自動入力する
> C.目視チェックの為に処理を停止させる
> D.「再開」ボタンをクリックしたら処理を再開させる
>
> next
>
>
> 上記の、C,Dをどのように記述していいのかわかりません。
>
> 私の考えでは、
>
> 1から600まで秒をカウントする
> 「再開」ボタンがクリックされたら秒をカウントするループを抜ける
>
> このような考えでよろしいでしょうか。
> また、他に良い考えはないでしょうか。
>
>
> どうぞよろしくお願いします。
>
ループ中に処理を止めるという考えよりは
「再開」ボタン押下により、ABCの処理を行う。
ではないでしょうか?
URLやカウンタの値は保持しておけば次のURLも特定出来るはず。
ところで600という数字はどこから来たのでしょう。
制限時間付ですか?
癒耶様

コメントありがとうございます。


> ループ中に処理を止めるという考えよりは
> 「再開」ボタン押下により、ABCの処理を行う。
> ではないでしょうか?
> URLやカウンタの値は保持しておけば次のURLも特定出来るはず。


ご指摘の、「再開」ボタン押下により、ABCの処理を行う。
とした場合、
ABCの処理が終わった後、目視チェック・手修正の作業ため待ちの後、
次のURLの処理に移る方法がわかりませんでした。


> ところで600という数字はどこから来たのでしょう。
> 制限時間付ですか?

目視チェック・手修正の作業用に、最長10分待つ、というものです。


いろいろ試行錯誤した結果、

1から600まで秒をカウントする
「再開」ボタンがクリックされたら秒をカウントするループを抜ける

という方法で解決できました。


ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板