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

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

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

Re[2]: [C#]foreachの処理について


(過去ログ 108 を表示中)

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

■64612 / inTopicNo.1)  [C#]foreachの処理について
  
□投稿者/ lysis (1回)-(2012/12/11(Tue) 18:16:52)

分類:[C#] 

2012/12/11(Tue) 19:53:44 編集(投稿者)
C#,Microsoft Visual Studio2012で開発してます。

foreachでListViewに登録されているItemを順番に読み出して、Webbrowserにnavigateさせるというコードなのですが、思うように動きません。

                    foreach (ListViewItem urlID in listView1.Items)
                    {
                        this.webBrowser1.Navigate(URL1 + urlID.Text + URL2);
                    }

ListViewに登録されているurlIDを最初から最後まで巡っていきたいのです。
しかしこのコードだと、最初のIDだけしか出力されないのです。勿論listviewには2つ以上アイテムが登録されています。
どうすればいいでしょうか?よろしくお願いします。

引用返信 編集キー/
■64613 / inTopicNo.2)  Re[1]: [C#]foreachの処理について
□投稿者/ くんつ (1回)-(2012/12/11(Tue) 19:25:42)
No64612 (lysis さん) に返信

> ListViewに登録されているurlIDを最初から最後まで巡っていきたいのです。

urlIDとは何のことですか?ListViewItemのTextのことですか?

> しかしこのコードだと、最初のIDだけしか出力されないのです。勿論listviewには2つ以上アイテムが登録されています。

出力されないとはどういう意味ですか?webBrowser1にNavigateされないということですか?
そもそも、foreachでwebBrowser1にNavigateすることで、どのような動作を期待しているのでしょうか?
(残念ながら、ちょっと想像がつきません。)
引用返信 編集キー/
■64614 / inTopicNo.3)  Re[1]: [C#]foreachの処理について
□投稿者/ 魔界の仮面弁士 (108回)-(2012/12/11(Tue) 19:35:44)
No64612 (lysis さん) に返信
> foreachでListViewに登録されているItemを順番に読み出して、
> Webbrowserにnavigateさせるというコードなのですが、思うように動きません。
もう少し『具体的』に書いて頂けると、状況を想像しやすいです。


> this.webBrowser1.Navigate(URL1 + listviewitm.Text + URL2);
変数 URL1 や URL2 は実際には「URL」ではなく、「URL の一部分」なのでしょうか。

「URL1 + listviewitm.Text + URL2」は、具体的にはどのような文字列を返しますか?



> ListViewに登録されているurlIDを最初から最後まで巡っていきたいのです。

urlID というのが何を意味するのか分かりませんが、たとえば、

 URL1 = "http://example.com/urlID=";
 URL2 = "&key=1234";

 listView1 =
  "abcd"
  "wxyz"
  "9999"

のように登録されていて、それを
 url = "http://example.com/urlID=abcd;wxyz;9999&key=1234";
のように指定したいという意味なら、下記のように書けます。

  private void button1_Click(object sender, EventArgs e)
  {
    string URL1 = @"http://example.com/urlID=";
    string URL2 = @"&key=1234";

    string urlID = String.Join(";",
                from ListViewItem li in listView1.Items
                select li.Text);

    Uri url = new Uri(URL1 + urlID + URL2);

    webBrowser1.Navigate(url);
  }

-----------------------

あるいはアイテムが 3 つあって、それを 3 つの WebBrowser で開かせたいなら
たとえばこんな感じ。

  // ListView と Button と TabControl を貼っておく

  private void Form1_Load(object sender, EventArgs e)
  {
      listView1.Items.Clear();
      listView1.Items.Add("http://www.google.com/");
      listView1.Items.Add("http://www.yahoo.co.jp/");
      listView1.Items.Add("http://www.bing.com/");
  }

  private void button1_Click(object sender, EventArgs e)
  {
      tabControl1.TabPages.Clear();
      foreach (ListViewItem li in listView1.Items)
      {
          WebBrowser wb = new WebBrowser() { Dock = DockStyle.Fill};
          TabPage page = new TabPage("loading...");
          page.Controls.Add(wb);
          wb.DocumentTitleChanged += wb_DocumentTitleChanged;

          //var url = URL1 + li.Text + URL2;
          var url = li.Text;
          wb.Navigate(url);

          tabControl1.TabPages.Add(page);
      }
  }

  void wb_DocumentTitleChanged(object sender, EventArgs e)
  {
      WebBrowser wb = (WebBrowser)sender;
      TabPage page = (TabPage)wb.Parent;
      page.Text = wb.DocumentTitle;
  }



-----------------------

あるいは 1 つの WebBrowser で連続的に開かせるなら…。

  // ListView と Button と WebBrowser を貼っておく

  private void Form1_Load(object sender, EventArgs e)
  {
      listView1.Items.Clear();
      listView1.Items.Add("http://www.google.com/");
      listView1.Items.Add("http://www.yahoo.co.jp/");
      listView1.Items.Add("http://www.bing.com/");
  }

  IEnumerator<ListViewItem> items = null;

  private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
  {
      NavigateNext();
  }

  private void button1_Click(object sender, EventArgs e)
  {
      items = listView1.Items.OfType<ListViewItem>().GetEnumerator();
      NavigateNext();
  }

  void NavigateNext()
  {
      if (items == null) return;

      if (items.MoveNext())
      {
          ListViewItem li = items.Current;

          //var url = URL1 + li.Text + URL2;
          var url = li.Text;
          webBrowser1.Navigate(url);
      }
      else
      {
          items = null;
      }
  }

引用返信 編集キー/
■64615 / inTopicNo.4)  Re[1]: [C#]foreachの処理について
□投稿者/ ヴァン (19回)-(2012/12/11(Tue) 19:57:41)
こんにちは。

せめて受信完了まで待ってあげた方がいいと思いますが...

No64612 (lysis さん) に返信
> 2012/12/11(Tue) 19:53:44 編集(投稿者)
>
> C#,Microsoft Visual Studio2012で開発してます。
>
> foreachでListViewに登録されているItemを順番に読み出して、Webbrowserにnavigateさせるというコードなのですが、思うように動きません。
>
> foreach (ListViewItem urlID in listView1.Items)
> {
> this.webBrowser1.Navigate(URL1 + urlID.Text + URL2);
> }
>
> ListViewに登録されているurlIDを最初から最後まで巡っていきたいのです。
> しかしこのコードだと、最初のIDだけしか出力されないのです。勿論listviewには2つ以上アイテムが登録されています。
> どうすればいいでしょうか?よろしくお願いします。
引用返信 編集キー/
■64619 / inTopicNo.5)  Re[2]: [C#]foreachの処理について
□投稿者/ lysis (2回)-(2012/12/11(Tue) 22:52:59)
解決しました。皆さん、ありがとうございました。
魔界の仮面弁士さんの WebBrowser で連続的にURLを開かせるコードを使わせて頂きました。
今後、分かりやすい質問を心がけます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -