ウェブブラウザの切り替えができません。

解決


kazuki  2005-08-24 23:03:58  No: 124413  IP: [192.*.*.*]

タブを使ったウェブブラウザを作成しているのですが、ウェブブラウザの切り替え(表示、非表示)がうまくできないので教えてください。

タブはTabStripを使用し、ウェブブラウザはコントロール配列を使っています。タブ番号の取得は別途作成したDLLにより取得しています。DLLの動作は正常です。それでコマンドボタンをによりウェブブラウザ、タブ、タブの数を数える変数"TabCount"を増やしています。下のプログラムはタブをクリックした時のものです。

    Dim Count As Integer 'カウンタ変数
    Dim TabNum As Integer  '左クリックしたときのタブの番号を入れる変数
    
    TabNum = タブ番号を取得するDLL
        
    For Count = 0 To TabCount
        WebBrowser1(Count).Visible = False
    Next Count
    WebBrowser1(TabNum).Visible = True

動作的には0〜TabCount分のウェブブラウザを全部非表示にして、押されたタブ番号のウェブブラウザを表示するというものです。
何がうまくいかないのかというと、タブを3個増やしたとします。(タブは4つ)それでタブの2つ目をクリックしてもウェブブラウザが表示されません。タブの3つ目、4つ目も同様です。しかしタブの1つ目は正常に動作するんです。TabStripの後ろに隠れているということはないようですし、ウェブブラウザも正常にロードされています。

よろしくお願いします。

編集 削除
kazuki  2005-08-25 00:09:32  No: 124414  IP: [192.*.*.*]

どうも原因は他のところにあったようで、フォームのリサイズをするプロシージャがだめなようでした。

Private Sub Form_Resize()
    
    Dim Count As Integer
    
    'タブ全体のサイズ変更
    TabCtrl.Top = Form1.ScaleTop + 1500
    TabCtrl.Left = Form1.ScaleLeft
    TabCtrl.Height = Form1.ScaleHeight - 1500
    TabCtrl.Width = Form1.ScaleWidth
    
    'ウェブブラウザのサイズ変更
    For Count = 0 To TabCount
        WebBrowser1(Count).Top = TabCtrl.Top + 320
        WebBrowser1(Count).Left = TabCtrl.Left
        WebBrowser1(Count).Height = TabCtrl.Height - 380
        WebBrowser1(Count).Width = TabCtrl.Width - 50
    Next Count
       
End Sub

リサイズのプロシージャは上のようなプログラムになっているのですが、このプロシージャを消すと正常に切り替えができているようです。(タブをウェブブラウザの位置が違うため切り替わっているのが確認できました。)そのため、上の質問で書いた"TabStripの後ろに隠れているということはないようですし"というのは間違っていたようで実際は隠れていると言うことになると思います。ただ、なぜ隠れるのかがわかりません。この隠れる現象が何とかなれば大丈夫だと思うのですが。。。

引き続きよろしくお願いします。

編集 削除
kazuki  2005-08-25 00:10:43  No: 124415  IP: [192.*.*.*]

上のTabCtrlというのはTabStripのことです。

編集 削除
ねろ  2005-08-25 08:55:47  No: 124416  IP: [192.*.*.*]

これだけで原因を特定することは無理です。
WebBrowser1(TabNum).Visible = True
これをコメントアウトすると、全ての  WebBrowser1は
非表示になるのですか?

編集 削除
kazuki  2005-08-25 09:03:36  No: 124417  IP: [192.*.*.*]

>これだけで原因を特定することは無理です。
そうでしたか。。。


>WebBrowser1(TabNum).Visible = True
>これをコメントアウトすると、全ての  WebBrowser1は
>非表示になるのですか?
コメントアウトしたところ実行直後は表示されていますが、タブのどれかを押すことにより非表示になります。

編集 削除
ねろ  2005-08-25 09:24:34  No: 124418  IP: [192.*.*.*]

>コメントアウトしたところ実行直後は表示されていますが、タブのどれかを押すことにより非表示になります。
最初に書かれたコードは、タブのどれかを押したら実行されますので、当然そうなりますよね。
この様態で、プログラムを中断して、イミディエイトウィンドウで  
WebBrowser1(TabNum).Visible = True
としたらどうなりますか?(TabNumには数字を入れてね)

編集 削除
kazuki  2005-08-25 09:49:44  No: 124419  IP: [192.*.*.*]

やり方が間違っているかもしれませんが。。。

1.タブをいくつかふやす(ここでは4つ)
2.中断を押す
3.イミディエイトウィンドウでTabNumの数値をいれる(0〜3)

やり方としてはこのようでいいのでしょうか?
このやり方でやってTabNumの数値を0〜3まで入れていきましたが、1〜3は更新ボタンを押したような感じ(視覚的に変化)になったのですが、0に関してはイミディエイトウィンドウ上でカーソルが下へ下へ行ってしまいます。
また、1〜3で切り替わった感じがしたと書いたのですが、正確には切り替わっていません。0以降のウェブブラウザはgoogleが設定されているのですが、(ちなみに0はyahoo)1〜3を入れてもyahooのページが表示されています。

編集 削除
ねろ  2005-08-25 10:06:58  No: 124420  IP: [192.*.*.*]

こうしましょう
1. WebBrowser1(TabNum).Visible = Trueをコメントアウトする。
2.タブをいくつかふやす(ここでは4つ)
3.WebBrowser1(TabNum).Visible = Trueが書かれているSubのEnd Subにブレークポイントを設定する。
これでWebBrowser1が全て表示されていないことを確認する。
4.イミディエイトウィンドウで  WebBrowser1(0).Visible = Trueをやってみる。
5.イミディエイトウィンドウで  WebBrowser1(0).Visible = False、  WebBrowser1(1).Visible = Trueをやる
これでどうなりますか。

編集 削除
kazuki  2005-08-25 10:17:24  No: 124421  IP: [192.*.*.*]

ブレークポイントを設定するとイミディエイトウィンドウに入力することができないのですが。。。また、実行前にイミディエイトウィンドウに入力し、Enterを押すとSubまたはFunctionが設定されていませんと表示されます。

編集 削除
ねろ  2005-08-25 10:34:34  No: 124422  IP: [192.*.*.*]

イミディエイトウィンドウを表示するのは、タブを選択して
ブレークポイントで中断してからです。

編集 削除
kazuki  2005-08-25 21:31:56  No: 124423  IP: [192.*.*.*]

返事が遅くなってすみません。

それでやってみたのですが、Webbrowser1(0)に関してはTrue、Falseともに正常に動作しましたが、Webbrowser1(1)はうまく動作しませんでした(表示されませんでした)。

編集 削除
ねろ  2005-08-26 07:36:32  No: 124424  IP: [192.*.*.*]

>Webbrowser1(1)はうまく動作しませんでした(表示されませんでした)
エラーも出ないし、表示もされないなどということは無いと思いますが。

編集 削除
kazuki  2005-08-26 10:17:10  No: 124425  IP: [192.*.*.*]

何度やっても表示されません。
ためしにタブを一個増やし、WebBrowser1(2).Visible = True
とやってみたら"コントロール配列要素2がありません"と表示されたので
WebBrowser1(1)はロードされているのだと思います。
やはりタブの後ろに隠れているのだと思うのですが。。。

編集 削除
通ってみた  2005-08-26 12:43:05  No: 124426  IP: [192.*.*.*]

>>やはりタブの後ろに隠れているのだと思うのですが。。。

単にTabStripのVisibleをFalseにしてみればわかるのでは・・・?

編集 削除
arowana  URL  2005-08-26 12:46:35  No: 124427  IP: [192.*.*.*]

この記事、すごくないですか?

http://kiss0808.blog19.fc2.com/

編集 削除
ねろ  2005-08-26 12:58:17  No: 124428  IP: [192.*.*.*]

ありゃー!
WebBrowser1(1)を追加した時、ZOrderを設定してありませんか?
WebBrowser1(1).ZOrder 0
としてください。

編集 削除
ねろ  2005-08-26 16:42:20  No: 124429  IP: [192.*.*.*]

途中で変な物が足跡つけたので気が散った。
TabStripのSelectedItem.Indexは1ベースで、
WebBrowserの配列は0ベースの為、其のままだと
1つずつずれるのね、昔作ったタブブラウザーを参考にどうぞ。
Option Explicit
Dim url(0 To 1, 0 To 3) As String
Const NoOfTab = 4
Private Sub Form_Load()
    Dim n As Integer
    Me.Caption = "タブブラウザー"
    url(0, 0) = "google": url(1, 0) = "http://www.google.co.jp/"
    url(0, 1) = "yahoo": url(1, 1) = "http://www.yahoo.co.jp/"
    url(0, 2) = "goo": url(1, 2) = "http://www.goo.ne.jp/"
    url(0, 3) = "msn": url(1, 3) = "http://www.msn.co.jp/home.armx"
    For n = 1 To NoOfTab - 1
        Load WebBrowser1(n)
        TabStrip1.Tabs.Add
        TabStrip1.Tabs(n + 1).Caption = url(0, n)
    Next
    TabStrip1.Tabs(1).Caption = url(0, 0)
    With WebBrowser1(0)
        .Visible = True
        .Navigate2 url(1, 0)
        .ZOrder 0
    End With
    Form_Resize
End Sub
Private Sub Form_Resize()
    Dim n As Integer
    With TabStrip1
        .Left = 0
        .Top = 0
        .Width = Me.Width - 100
        .Height = Me.Height - 500
    End With
    For n = 0 To TabStrip1.Tabs.Count - 1
        With WebBrowser1(n)
            .Top = TabStrip1.ClientTop
            .Left = TabStrip1.ClientLeft
            .Width = TabStrip1.ClientWidth
            .Height = TabStrip1.ClientHeight
        End With
    Next
End Sub
Private Sub TabStrip1_Click()
    Dim n As Integer
    For n = 0 To TabStrip1.Tabs.Count - 1
        WebBrowser1(n).Visible = False
    Next
    WebBrowser1(TabStrip1.SelectedItem.Index - 1).Visible = True
    WebBrowser1(TabStrip1.SelectedItem.Index - 1).ZOrder 0
    WebBrowser1(TabStrip1.SelectedItem.Index - 1).Navigate2 _
    url(1, TabStrip1.SelectedItem.Index - 1)
End Sub

編集 削除
kazuki  2005-08-26 20:50:23  No: 124430  IP: [192.*.*.*]

ZOrderにより表示させることができました。

>>通ってみたさん
TabStripを非表示にするとタブがクリックできないので。。。

ねろさんのプログラムぜひ参考にさせていただきます。

ありがとうございました。

編集 削除
通ってみた  2005-08-27 01:33:11  No: 124431  IP: [192.*.*.*]

>>TabStripを非表示にするとタブがクリックできないので。。。
いや・・・
表示されない→タブの後ろにあるのでは?→タブ押してWebBrowser増やしたら同時にVisibleをFalseにしてみれば後ろにあればそいつが表示されるので確認できる
という流れだったんですが・・・まぁ解決したのでいいけど

「こうなんじゃないか?」と思ったら、それを確認する方法を考えるのも大事なことだと思いますよ

編集 削除