|
2013/10/18(Fri) 22:45:44 編集(投稿者)
■No68406 (joker さん) に返信 > と書いてみたところ上手くいきませんでした。 コード自体は合っているように見えます。
Web ページの読み込みが完了する前に割り当てている、ということはありませんか? (DocumentCompleted が発生する前に割り当てているとか)
もしくは、AttachEventHandler 後に別のページに遷移していたりはしないでしょうか。 ドキュメントが読み直された場合は、再度イベントの割り当てが必要です。
(Visual Studio が使えない場所に居るため、検証せずに回答しています。間違っていたらどなたかフォロー願います。)
> webBrowser1.Document.GetElementById("idの値").AttachEventHandler("onclick", delegate { MessageBox.Show(押された!"); }); 「"」が一個抜けているのは目を瞑るとして、これは匿名メソッドですね。記述自体は正しいと思います。
上記は引数を省略した構文であり、省略しない場合には、 webBrowser1.Document.GetElementById("idの値").AttachEventHandler("onclick", delegate(object o, EventArgs a) { MessageBox.Show("押された!"); }); あるいは webBrowser1.Document.GetElementById("idの値").AttachEventHandler("onclick", new EventHandler(delegate(object o, EventArgs a) { MessageBox.Show("押された!"); })); などと書きます。
ちなみに VB には匿名メソッドが存在しないため、上記に対応する VB 構文はありません。 (VB2005 以下で無いのなら、ラムダ式で代用できますけれどね)
> webBrowser1.Document.GetElementById("idの値").AttachEventHandler("onclick", Function() MessageBox.Show("押された!")) この場合の Function は「単一行ラムダ式」ですね。VB2010 以降では、Function() の代わりに Sub() も使えます。
手元に環境が無いので確認できませんが、C# 構文に訳すのであれば、 webBrowser1.Document.GetElementById("idの値").AttachEventHandler("onclick", (object o, EventArgs a) => MessageBox.Show("押された!")); になると思います。ただし VB のように、引数を省略した webBrowser1.Document.GetElementById("idの値").AttachEventHandler("onclick", () => MessageBox.Show("押された!")); といった書き方はできなかったはずです(引数定義が異なるのでエラーになるはず)。 引数を省略したい場合には、ラムダ式やデリゲートインスタンスでは無く、匿名メソッドを使えば OK です。
> delegateの意味が難しくて分かりませんでした。 いわゆる「イベント」の割り当てを行う際にもデリゲートを渡しますよね。構文的には、「+=」で代入するかどうかの違いだけです。
|