投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/5/19 04:24:02
> 検討違いな事があればご指摘ください。
そもそも、この処理がどういう目的で記述されているのかわからないので、
回答に困るのですが…とりあえずは一般論の一つという事で回答しておきます。


> While done = False
>     Application.DoEvents()
> End While
このようなループ待機を行ってはいけません。

DoEvents を無闇矢鱈と呼んでしまうと、イベント処理中に次のイベント再入が発生してしまい、
予測しにくい問題を引き起こします。それに、見た目の CPU 仕様率も跳ね上がってしまいますよ。
(Ctrl+Shift+Esc を押して、タスクマネージャを表示させた状態でループを実行させてみてください)

まずはコードの見直しを行い、ループ待機を行っている部分をイベント処理に書き直す事を検討してみてください。

例えば、『チェックボックスの値が変更されたら、○○○という処理を解する』という仕様があった場合、
「CheckBox1.Checked が変化するまでループで待機する」なんてコードは書きませんよね?
通常は、CheckBox1 の CheckedChanged イベントの中に ○○○ の処理を記述するかと思います。


> 質問1:Navigateメソッドをオーバーロードした場合に
どういう意味でしょうか?
提示されたコードの Navigate メソッドは、『オーバーロード』されていないようですが…。


> DocumentCompletedをどちらのクラスで
> 発生させれば良いのでしょうか?
ここで比較しているクラスとは、「cWebBrowser クラス」と「Form1 クラス」のことでしょうか。

だとしたら、DocumentCompleted イベントは WebBrowser が発生させる物であって、
cWebBrowser や Form1 が、同名イベントを追加発生(RaiseEvent)させる物ではありません。
一般的には、DocumentCompleted イベントを受け取る(イベントに応答させる)だけでしょう。


> 質問2:質問1と関連してcWebBrowserクラスにてDocumentCompletedイベントを発生
> させるには、Inherits WebBrowserにてWebBrowserを継承するのが適切なのですか?
Inherits させた場合、継承元のクラスが自動的にイベントを発生させますので、
自分であえて呼び出す必要はありません。


どのような目的のために、イベントを独自に発生させようとしているのかわからないので
具体的な回答はできませんが、もし、イベントの発生条件を変更したいという意味であれば、
MyClass.OnDocumentCompleted と MyBase.OnDocumentCompleted とを
適切に呼び分ける必要があるでしょう。すなわち、OnDocumentCompleted メソッドを
『オーバーライド』する必要があるということです。