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

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

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

Re[13]: タブブラウザ2


(過去ログ 57 を表示中)

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

■32645 / inTopicNo.1)  タブブラウザ2
  
□投稿者/ うちわ (11回)-(2009/02/11(Wed) 22:18:49)

分類:[C#] 

2009/02/11(Wed) 22:19:22 編集(投稿者)

先日はお世話になりました。
またタブブラウザについて質問です。
タブの名前をHTML文書の<title>---</title>内の名前にして表示することは可能なのでしょうか?
解答宜しくお願いします。
引用返信 編集キー/
■32646 / inTopicNo.2)  Re[1]: タブブラウザ2
□投稿者/ επιστημη (1700回)-(2009/02/11(Wed) 22:28:05)
επιστημη さんの Web サイト
2009/02/12(Thu) 16:33:08 編集(投稿者)

> タブの名前をHTML文書の<title>---</title>内の名前にして表示することは可能なのでしょうか?

<TITLE>タグは WebBrowser.Document.Title で得られるみたいだから、
そいつを TabPage.Text にセットすりゃいんでね?

# 可能ですか? って訊き方はお薦めしません。「可能です」と答えられても困るでしょう?

引用返信 編集キー/
■32678 / inTopicNo.3)  Re[2]: タブブラウザ2
□投稿者/ うちわ (12回)-(2009/02/12(Thu) 16:25:08)
試しに下記のように構文を打ってみたんですが、エラーが出てしまいました。
どうすればいいのでしょう?

            TabPage page = new TabPage("ブラウザソフト名");
            WebBrowser browser = new WebBrowser();
            browser.Dock = DockStyle.Fill;        
            page.Controls.Add(browser);           
            tabControl1.Controls.Add(page);       
            browser.GoHome();                 
            tabControl1.Text = browser.Document.Title;

引用返信 編集キー/
■32679 / inTopicNo.4)  Re[3]: タブブラウザ2
□投稿者/ επιστημη (1708回)-(2009/02/12(Thu) 16:27:13)
επιστημη さんの Web サイト
2009/02/12(Thu) 16:28:26 編集(投稿者)

> 試しに下記のように構文を打ってみたんですが、エラーが出てしまいました。
> どうすればいいのでしょう?

「エラーが出てしまいました」だけでは判断できないということをわかってください。
残念ながら霊能者はここにはいません。

どこで・どんなエラーが出てしまいましたか?

引用返信 編集キー/
■32680 / inTopicNo.5)  Re[4]: タブブラウザ2
□投稿者/ うちわ (13回)-(2009/02/12(Thu) 16:36:14)
デバッグボタンを押してデバッグを開始し、「タブ追加」ボタンを押した際に
 「NullReferenceExceptionはハンドルされませんでした

  オブジェクト参照がオブジェクト インスタンスに設定されていません。」
と注意っぽい画面で出てきました…。
引用返信 編集キー/
■32681 / inTopicNo.6)  Re[5]: タブブラウザ2
□投稿者/ επιστημη (1709回)-(2009/02/12(Thu) 16:41:28)
επιστημη さんの Web サイト
2009/02/12(Thu) 16:51:30 編集(投稿者)

>  「NullReferenceExceptionはハンドルされませんでした
>   オブジェクト参照がオブジェクト インスタンスに設定されていません。」
> と注意っぽい画面で出てきました…。

browserに「どこそこを見に行け!」と言った直後ではまだHTMLを読み込めていませんね。
数秒かかるかもしれないし、数十秒かかるかもしれないし、時間切れであきらめるかもしれない。
だから「どこそこを見に行け!」と言った直後にDocumentやその中にあるTitleを返せるワケないのですよ。

# 処理の終了まで戻ってこないメソッドも数多くあります。
# が、それらはどれも極めて短い時間に処理が完了するからです。
# WebBrowserにそんなことやられると、読み終えるまでアプリケーションがかちーんと固まっちゃいます。


WebBrowserには読み込みを完了したときに発するイベントがあります。
それを捕まえてbrowser.Document.Titleを参照してはいかがでしょうか。

引用返信 編集キー/
■32682 / inTopicNo.7)  Re[6]: タブブラウザ2
□投稿者/ うちわ (14回)-(2009/02/12(Thu) 16:51:02)
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
tabControl1.Text = webBrowser1.Document.Title;
}
}

試しにこれでやってみましたが、タイトルが表示されませんでした…。
引用返信 編集キー/
■32684 / inTopicNo.8)  Re[7]: タブブラウザ2
□投稿者/ επιστημη (1710回)-(2009/02/12(Thu) 16:53:16)
επιστημη さんの Web サイト
2009/02/12(Thu) 17:29:59 編集(投稿者)

そのメソッドをイベントにアタッチしている箇所(コード)を見せてください。

「目覚ましが鳴ったら飛び起きる」はいいとして、
そもそも「目覚ましをセットしたのか?」を疑っています。

それと:

WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser; // [1]
if (browser != null)
{
tabControl1.Text = webBrowser1.Document.Title; [2]
}

[1] 読み込みを完了したのは"必ず"現在選択しているTabPageのものですか?
  読んでる最中にタブを切り替えたらどうなりますか?
[2] 読み込みを完了したのは"必ず"webBrowser1ですか?
[1]で求めたbrowserは何のためだったのですか?

こちらは「"鳴った目覚まし"に反応しているか」を疑っています。
鳴ってもいない目覚ましを止めようとしていませんか?

引用返信 編集キー/
■32689 / inTopicNo.9)  Re[8]: タブブラウザ2
□投稿者/ うちわ (15回)-(2009/02/12(Thu) 17:55:02)
2009/02/12(Thu) 18:16:25 編集(投稿者)

<pre><pre>using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TrainBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webBrowser1.GoHome();
tabPage1.Text = "";
}

private void 終了XToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}

//各種ツールバーの処理
private void toolStripButton1_Click(object sender, EventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
browser.GoBack();
}
}

private void toolStripButton2_Click(object sender, EventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
browser.GoForward();
}
}

private void toolStripButton3_Click(object sender, EventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
browser.GoHome();
}
}

private void toolStripButton4_Click(object sender, EventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
browser.Refresh();
}
}

private void toolStripButton5_Click(object sender, EventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
browser.Stop();
}
}

private void toolStripButton6_Click(object sender, EventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
browser.GoSearch();
}
}
//以上ボタンクリック時

private void toolStripButton12_Click(object sender, EventArgs e)
{
Tab();
}

private void toolStripButton13_Click(object sender, EventArgs e)
{
TabD();
}

//タブの削除
private void TabD()
{
if (tabControl1.Controls.Count != 1)
{
tabControl1.Controls.RemoveAt(1);
}
}

//タブの追加
private void Tab()
{
TabPage page = new TabPage("");
WebBrowser browser = new WebBrowser();
browser.Dock = DockStyle.Fill;
page.Controls.Add(browser);
tabControl1.Controls.Add(page);
browser.GoHome();
}

private void タブ追加ToolStripMenuItem_Click(object sender, EventArgs e)
{
Tab();
}

private void タブ削除ToolStripMenuItem_Click(object sender, EventArgs e)
{
TabD();
}

private void toolStripTextBox1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
if (e.KeyCode == Keys.Enter)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
browser.Navigate(toolStripTextBox1.Text);
}
}
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = tabControl1.SelectedTab.Controls[0] as WebBrowser;
if (browser != null)
{
tabControl1.Text = webBrowser1.Document.Title;
}
}
}
}

よくわからなくなったので、とりあえず全ての構文を載せときます。
[1] 読み込みを完了したのは"必ず"現在選択しているTabPageのものですか?
  読んでる最中にタブを切り替えたらどうなりますか?
想定していませんでした…。
[2] 読み込みを完了したのは"必ず"webBrowser1ですか?
こちらも同様に想定していませんでした…。

ps.あと、ツールバーでエンタキーを押した際の「パン」っていう音を消す方法はあるのでしょうか?</pre></pre>
引用返信 編集キー/
■32690 / inTopicNo.10)  Re[9]: タブブラウザ2
□投稿者/ επιστημη (1711回)-(2009/02/12(Thu) 18:05:07)
επιστημη さんの Web サイト
2009/02/13(Fri) 09:19:29 編集(投稿者)
> よくわからなくなったので、とりあえず全ての構文を載せときます。

タブを追加した時点でないとするとどこですか?
そこ以外にハンドラをアタッチする/できる/した記憶があるのは?
#「探してくれ」ならお断りです。

> [1] 読み込みを完了したのは"必ず"現在選択しているTabPageのものですか?
>   読んでる最中にタブを切り替えたらどうなりますか?
> 想定していませんでした…。
> [2] 読み込みを完了したのは"必ず"webBrowser1ですか? 
> こちらも同様に想定していませんでした…。

ならばちゃんと動く保証はありませんね。

> ps.あと、ツールバーでエンタキーを押した際の「パン」っていう音を消す方法はあるのでしょうか?

存じません。てか何を訊いてるのかわかりません。

...できたよ↓

using System;
using System.Windows.Forms;

namespace TabBrowser {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    // TabPage追加
    private void button1_Click(object sender, EventArgs e) {
      TabPage page = new TabPage("");
      WebBrowser browser = new WebBrowser();
      browser.DocumentCompleted 
        += this.webBrowser_DocumentCompleted; // ハンドラ・アタッチ
      browser.Dock = DockStyle.Fill;
      page.Controls.Add(browser);
      tabControl1.Controls.Add(page);
      browser.GoHome(); 
    }

    // 選択されているTabPageを削除
    private void button2_Click(object sender, EventArgs e) {
      if ( tabControl1.SelectedIndex >= 0 ) {
        (tabControl1.SelectedTab.Controls[0] as WebBrowser).DocumentCompleted 
          -= this.webBrowser_DocumentCompleted;  // ハンドラ・デタッチ
        tabControl1.Controls.RemoveAt(tabControl1.SelectedIndex);
      }
    }

    // 選択されているTabPageのWebBrwserのURLを変更
    private void button3_Click(object sender, EventArgs e) {
      if ( tabControl1.SelectedIndex >= 0 ) {
        (tabControl1.SelectedTab.Controls[0] as WebBrowser).Navigate(textBox1.Text);
      }
    }

    // WebBrowserがDocumentの読み込みを完了したら...
    private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
      WebBrowser browser = sender as WebBrowser;
      (browser.Parent as TabPage).Text = browser.Document.Title;
    }
  }
}

引用返信 編集キー/
■32714 / inTopicNo.11)  Re[10]: タブブラウザ2
□投稿者/ επιστημη (1714回)-(2009/02/13(Fri) 10:19:44)
επιστημη さんの Web サイト
↑補足。

フォーム(Form1)内にタブ(TabControl1)、追加ボタン(button1)、削除ボタン(button2)、
URL入力(textBox1)、Navigateボタン(button3)を置いてます。

引用返信 編集キー/
■32747 / inTopicNo.12)  Re[11]: タブブラウザ2
□投稿者/ うちわ (16回)-(2009/02/13(Fri) 16:19:30)
2009/02/13(Fri) 20:21:45 編集(投稿者)

構文張っていただきありがとうございました。

あとツールバーのことですが、書きまちがえました。正しくは
「ツールバーにあるコンボボックス内でEnterキーを押した際の「パン」という音を消す方法が有るのでしょうか」ということです。
宜しくお願いいたします。

psあとtoolstripの移動を可能にするにはどうすればいいのでしょうか?
引用返信 編集キー/
■32762 / inTopicNo.13)  Re[12]: タブブラウザ2
□投稿者/ επιστημη (1724回)-(2009/02/13(Fri) 22:02:24)
επιστημη さんの Web サイト
ちったー自分でやんなさい。
手も足も出んようなら勉強なさい。
「ここまで調べたがここがわからん」を示さんと
ただの教えて君でしょうが。

引用返信 編集キー/
■32772 / inTopicNo.14)  Re[13]: タブブラウザ2
□投稿者/ 倉田 有大 (436回)-(2009/02/14(Sat) 00:21:24)
>試しに下記のように構文を打ってみたんですが、エラーが出てしまいました。
>どうすればいいのでしょう?

質問の仕方が悪いですよ。
回答する人がコードを実際に入力して答えるのは手間です。
回答する人の労力を少なくすることを考えて質問されたほうがよいかと。
さもないと、返事すら返ってこなくなっちゃいますよ。

> ちったー自分でやんなさい。
> 手も足も出んようなら勉強なさい。
> 「ここまで調べたがここがわからん」を示さんと
> ただの教えて君でしょうが。

というか、いきなりタブブラウザーは難しいと思うけどなー
質問見ていると、あまりC#に慣れていないことが、感じ取られます。

ところで、私もタブブラウザー挑戦したいんですよね。そのうちやってみようかな。
で、グーグル検索機能つけておかねもらうんだー・・死亡フラグ
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -