タブブラウザを作りたい

タグの編集
投稿者 pit  (社会人) 投稿日時 2011/5/21 21:38:45
題名の通りタブブラウザを作りたいです。
タブブラウザといっても製作しているソフトの中ではあくまでオマケ的な機能なので以下の動作ができるような簡単なものを作りたいです。

・リンクをクリックするとタブを変えてそちらのWebbrowserコントロールにNavigateさせる。

流れとしては、
[1]最初のタブのWebbrowserコントロールでリンクがクリックされる。
[2]動的にタブを作る。
[3][2]に動的にWebbrowserコントロールを作る。
[4][3]にクリックされたリンクをNavigateさせる。

こんな感じだと思うのですがいまいちよくわかりません。
投稿者 Noname  (社会人) 投稿日時 2011/5/21 21:45:44
流れはそんな感じだと思うのですが
どのへんがわからないのでしょうか。
投稿者 pit  (社会人) 投稿日時 2011/5/21 22:28:43
>Nonameさん

分かりにくい質問で申し訳ありません。

・リンクがクリックされたときにイベントを発生させる方法
・新しいタブを動的に作る方法
・動的に作成したタブに動的にWebbrowserコントロールを設置する方法
・動的に作成したWebbroserのNavigateメソッドを使用する方法

以上の4点がわからないです。
投稿者 友哉  (高校生) 投稿日時 2011/5/21 23:07:13
サンプルを見つけたのでいちよう貼っておきます。
是非参考にしてみてください。

以下のサンプルは次の機能・特徴を備えるタブ型のブラウザである。 
TabControlコントロールを利用したタブ型ブラウザである。 
新しいウィンドウで開くで新しいタブが開く。(NewWindow2イベントを実装) 
スクリプトのWindow.close()でタブが閉じる。(WindowClosingイベントもどきを実装) 
キーボードショートカットCtrl-Nで新しいタブが開く等,ショートカットの機能の置き換えている。 
マウスの第4・第5ボタンや,インターネットショートカットボタン付きキーボードに対応している。(WM_APPCOMMANDメッセージの処理を実装) 
このような機能が付いているらしいです。

http://homepage1.nifty.com/yasunari/VB/VB2005/BasicTabBrowser.htm
投稿者 るきお  (社会人) 投稿日時 2011/5/22 15:17:23
>リンクがクリックされたときにイベントを発生させる方法
イベント自体は特に設定・プログラム等しなくても発生します。
使用するイベントはWebBrowserコントロールのNavigatingイベントか、Navigatedイベントを使うのがもっとも簡単です。
クリック自体を取得したい場合はWebBrowserコントロールのMouseClickイベントを使用しますがこれはリンク以外でもクリックするとイベントが発生します。
細かく制御したい場合はHtmlDocumentのClickイベントを使用します。
どれも、発生するタイミングは似ていますができることに差があります。

WebBrowser.Navigatingイベント
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.webbrowser.navigating(v=VS.100).aspx

WebBrowser.Navigatedイベント
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.webbrowser.navigated(v=VS.100).aspx

HtmlDocument.Clickイベント
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmldocument.click(v=VS.90).aspx

>・新しいタブを動的に作る方法
Dim newTab As New TabPage("新しいタブ")
TabControl1.TabPages.Add(newTab)


>・動的に作成したタブに動的にWebbrowserコントロールを設置する方法
newTab.Controls.Add(newBrowser) '←NewBrowserが動的に作成したWebBrowserコントロール 


>・動的に作成したWebbroserのNavigateメソッドを使用する方法
newBrowser.Navigate("http://www.nifty.ne.jp/")


ちなみに、動的に作成したタブに動的に作成したWebBrowserを配置し、http://www.nifty.ne.jp/に遷移する方法
Dim newBrowser As New WebBrowser
newBrowser.Dock = DockStyle.Fill    '←不要な場合ははずしてください。 
newBrowser.Navigate("http://www.nifty.ne.jp/")

Dim newTab As New TabPage("新しいタブ")
newTab.Controls.Add(newBrowser) 
TabControl1.TabPages.Add(newTab)
投稿者 YAS  (社会人) 投稿日時 2011/5/25 02:17:59
>リンクがクリックされたときにイベントを発生させる方法

 確かに,この条件ではるきおさんのおっしゃる通りですが,タブブラウザをつくるのであれば,NewWindowイベントを処理できないと,リンクを「新しいウィンドウで開く」場合にIEが立ち上がってしまいます。
 しかし,WebBrowserコントロールのNewWindowイベントでは,「新しいウィンドウで開く」のキャンセルをすることはできますが,開くべきURLを取得することができません。また,Navigatingイベントで取得しようと思っても,NewWindowイベントでキャンセルをすると,Navigatingイベントが発生しません。わたしは,WebBrowserコントロールのNewWindowイベントでタブブラウザのような動作を実現するのは無理であろうと考えます。
 そのため,わたしのサンプルではNewWindow2イベントを実装しています。NewWindow2イベントでは
「新しいウィンドウを開く」をキャンセルでき,なおかつ開くべきページのURLを取得できます。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/5/25 13:57:00
なお、「新しいウィンドウで開く」と「新しいタブで開く」を区別したい場合には
NewWindow3 イベントを使う事になるかと思います。
(ただし、新しいタブを開く機能は初期状態で無効化されています)
http://msdn.microsoft.com/ja-jp/library/dd163927.aspx
http://msdn.microsoft.com/en-us/library/aa768288%28VS.85%29.aspx