C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: WebBrowser上のbuttonイベントを拾いたい2


(過去ログ 81 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■47893 / inTopicNo.1)  WebBrowser上のbuttonイベントを拾いたい2
  
□投稿者/ くまだ (3回)-(2010/03/17(Wed) 15:36:17)

分類:[VB.NET/VB2005 以降] 

ローカルにあるHTMLファイルをWebBrowserに表示させ、HTML上に配置したボタンをクリックしたときに処理を実行しようと考えており、
その方法について回答を頂きました。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=46863&KLOG=79

Dim q = From Tag As HtmlElement In WebBrowser1.Document.Body.GetElementsByTagName("INPUT") _
        Select Tag, Type = Tag.GetAttribute("type") _
        Where Type = "button" OrElse Type = "submit" _
        Select Tag

For Each button In q
    button.AttachEventHandler("onclick", Function() MsgBox("押された!"))
Next

ここで、ボタンが複数ある場合、ボタンクリックイベントを取得すると同時に、どのボタンがクリックされたかを知るには
どのようにすればよいでしょうか?
例えば、以下のタグの例で、ボタン1をクリックした場合に、id="btn1"の情報(HtmlElementでもいいですし、id情報でもいいです)を
知りたいのです。

<INPUT type="button" name="btn1" id="btn1" value="ボタン1">
<INPUT type="button" name="btn2" id="btn2" value="ボタン2">

VB2008を使用しております。
宜しくお願い申し上げます。

引用返信 編集キー/
■47906 / inTopicNo.2)  Re[1]: WebBrowser上のbuttonイベントを拾いたい2
□投稿者/ 魔界の仮面弁士 (1564回)-(2010/03/17(Wed) 18:06:37)
2010/03/17(Wed) 18:14:24 編集(投稿者)

No47893 (くまだ さん) に返信
> ここで、ボタンが複数ある場合、ボタンクリックイベントを取得すると同時に、どのボタンがクリックされたかを知るには
> どのようにすればよいでしょうか?

AttachEventHandler に割り当てたメソッド内で、
 Dim button As Object = WebBrowser1.Document.DomDocument.parentWindow.event.srcElement
もしくは
 Dim button As Object = WebBrowser1.Document.Window.DomWindow.event.srcElement
を取得してみてください。
一般的なイベントでいうところの「sender」引数に相当するオブジェクトが取得できます。
引用返信 編集キー/
■47938 / inTopicNo.3)  Re[2]: WebBrowser上のbuttonイベントを拾いたい2
□投稿者/ くまだ (4回)-(2010/03/18(Thu) 09:41:49)
No47906 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士様、この度もご回答ありがとうございます。
また、対象のボタンがフレーム(frame1)にある場合、
Dim obj As Object = WebBrowser1.Document.Window.Frames("frame1").Document.Window.DomWindow.event.srcElement
If obj IsNot Nothing Then
MsgBox(obj.Id)
End If
で取得することができました。
ありがとうございました。

ところで、このObjectはどういったデータ型なのでしょうか?
また、上記Objectを、簡単にHtmlElementにキャストすることは可能でしょうか?
単純にTryCastというわけにはいかないようで。。。
Idは取得できるので、キャストができないのであれば問題ないのですが。
宜しくお願い申し上げます。
引用返信 編集キー/
■47940 / inTopicNo.4)  Re[3]: WebBrowser上のbuttonイベントを拾いたい2
□投稿者/ 魔界の仮面弁士 (1566回)-(2010/03/18(Thu) 09:58:14)
No47938 (くまだ さん) に返信
> ところで、このObjectはどういったデータ型なのでしょうか?
MSHTML 関連の COM オブジェクトです。mshtml.tlb を参照設定してみてください。
http://msdn.microsoft.com/en-us/library/aa741317.aspx

> また、上記Objectを、簡単にHtmlElementにキャストすることは可能でしょうか?
マネージの System.Windows.Forms.HtmlElement クラスにキャストする事はできませんが、
アンマネージの IHTMLElement インターフェイスや IHTMLInputButtonElement インターフェイス等に
キャストすることはできます。

> Idは取得できるので、キャストができないのであれば問題ないのですが。
そこで得た id を元に、HtmlDocument.GetElementById メソッドを呼び出すという手もあります。
引用返信 編集キー/
■47951 / inTopicNo.5)  Re[4]: WebBrowser上のbuttonイベントを拾いたい2
□投稿者/ くまだ (5回)-(2010/03/18(Thu) 11:15:52)
No47940 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士様、いつも丁寧な解説を頂きありがとうございます。
色々と勉強になりました。

>>Idは取得できるので、キャストができないのであれば問題ないのですが。
> そこで得た id を元に、HtmlDocument.GetElementById メソッドを呼び出すという手もあります。

そうですね。今回の対象のボタン等はすべてidを振っていますので、とりあえずHtmlElementが必要な場合は
idよりHtmlElementを取得するようにします。
ありがとうございました。
今後とも宜しくお願い申し上げます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -