■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;
}
}
|
|