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

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

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

Re[4]: webBrowser上のテキストの取得と設定


(過去ログ 23 を表示中)

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

■10300 / inTopicNo.1)  webBrowser上のテキストの取得と設定
  
□投稿者/ くまこ (12回)-(2007/11/15(Thu) 10:37:39)

分類:[C#] 

こんにちは、くまこです。
いつもお世話になります。

webBrowserに関する質問です。

フォームにコンポーネント「webBrowser」と「button」をぽとりペタと配置し、
Form1 Load時に
webBrowser1.Navigate("http://kumako22.web.fc2.com/");           
にてWebサイトを表示しています。

そこで次の2つのことをやりたいです。
1.「button」をクリックした時に、webページの
  「<input type="text" name="myFormA" size="2" />」に表示されている値を
  取得する事です。(MessageBox.Show表示)

2.また、可能であれば、
  「name="myFormQ1"」や「name="myFormQ2"」に任意の数字を設定し、
  掛け算を実行させたいです。

# 別の方の質問の内容と同じだと思います。
# http://bbs.wankuma.com/index.cgi?mode=al2&namber=9884
# しかしキーワード
# 「IHTMLDocument2.selection createRange IHTMLTxtRange.text」あたりで
# 検索しているのですが、答えがわかりません。


どなたかアドバイスよろしくお願いします。


引用返信 編集キー/
■10302 / inTopicNo.2)  Re[1]: webBrowser上のテキストの取得と設定
□投稿者/ 魔界の仮面弁士 (520回)-(2007/11/15(Thu) 10:55:38)
No10300 (くまこ さん) に返信
> webBrowserに関する質問です。
.NET 2.0 の マネージ WebBrowser という事でよいですよね。

> 1.「button」をクリックした時に、webページの
>   「<input type="text" name="myFormA" size="2" />」に表示されている値を
>   取得する事です。(MessageBox.Show表示)

private void button1_Click(object sender, EventArgs e)
{
  MessageBox.Show((string)webBrowser1.Document.Forms["myForm"].All["myFormQ1"].GetAttribute("value"));
}


> 2.また、可能であれば、
>   「name="myFormQ1"」や「name="myFormQ2"」に任意の数字を設定し、
>   掛け算を実行させたいです。
private void button2_Click(object sender, EventArgs e)
{
  HtmlElementCollection items = webBrowser1.Document.Forms["myForm"].All;

  //入力された文字列を得る。
  string text1 = (string)items["myFormQ1"].GetAttribute("value");
  string text2 = (string)items["myFormQ2"].GetAttribute("value");

  //数値に変換。
  double value1;
  if (!double.TryParse(text1, out value1)) value1 = Double.NaN;
  double value2;
  if (!double.TryParse(text2, out value2)) value2 = Double.NaN;

  //乗算して表示。
  double result = value1 * value2;
  items["myFormA"].SetAttribute("value", result.ToString());
}

引用返信 編集キー/
■10303 / inTopicNo.3)  Re[2]: webBrowser上のテキストの取得と設定
□投稿者/ くまこ (13回)-(2007/11/15(Thu) 11:08:41)
2007/11/15(Thu) 11:09:26 編集(投稿者)

とても早いレスありがとうございます!!!

No10302 (魔界の仮面弁士 さん) に返信
>>webBrowserに関する質問です。
> .NET 2.0 の マネージ WebBrowser という事でよいですよね。

前の質問者の方も
>その webBrowser ってのがどこのどんな webBrowser なのかは分かりませんが
と言われてましたが・・・
すみません、意味が分かりません(^^;;

「.NET のバージョンによって機能が異なるため回答も異なる」から、
確認されているのでしょうか…(^^;;
私はC#2005ですので、.NET 2.0 で良いです。
そうか、そうですよね、バージョンを記載すべきでしたね。


ご教示頂いた内容、完璧に求めている事が実現できました。

ググって色々なサイトを見てまわった感じから、
もっと大変なコーディングが必要だと思っていたものですから、
あまりにもシンプルなコードで実現できて、かなり衝撃です!!

感動して、ちょっとの間、放心状態になりました(笑)

魔界の仮面弁士様、大変、勉強になりました!
ありがとうございました。

解決済み
引用返信 編集キー/
■10309 / inTopicNo.4)  Re[3]: webBrowser上のテキストの取得と設定
□投稿者/ 魔界の仮面弁士 (521回)-(2007/11/15(Thu) 13:09:41)
No10303 (くまこ さん) に返信
>>>webBrowserに関する質問です。
>>.NET 2.0 の マネージ WebBrowser という事でよいですよね。
> すみません、意味が分かりません(^^;;

.NET 2.0 には、System.Windows.Forms.WebBrowser が存在しますが、
それ以前のバージョンには、.NET 用の WebBrowser は無かったのです。

以前のバージョンでは、ActiveX 版である「COM ベースの WebBrowser コントロール」が
使われていました(今でも使えますけれどね)。
ActiveX 版の方は、AxWebBrowser と呼ばれる事もあります。

ActiveX 版の方が機能は豊富なのですが、C# からだと、少々扱いにくい設計になっているので、
.NET 2.0 からは、それが System.Windows.Forms.WebBrowser としてカプセル化されています。


> 「.NET のバージョンによって機能が異なるため回答も異なる」から、
> 確認されているのでしょうか…(^^;;
はい。両者(.NET 版と ActiveX 版)はよく似ていますが、同一ではないため、コードも異なります。


>>> 2.また、可能であれば、
>>>   「name="myFormQ1"」や「name="myFormQ2"」に任意の数字を設定し、
>>>   掛け算を実行させたいです。
よく見たら、こちらは「『button』をクリックした時」という条件が無いのですね。
だとするとこうかな。ボタンを押さずとも計算されるようにしてみました。


private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  if (e.Url.ToString() != "http://kumako22.web.fc2.com/")
  {
    return;
  }

  HtmlElementCollection items = webBrowser1.Document.Forms["myForm"].All;
  HtmlElement txtQ1 = items["myFormQ1"];
  HtmlElement txtQ2 = items["myFormQ2"];
  HtmlElement txtAns = items["myFormA"];

  EventHandler calc = delegate
  {
    string text1 = (string)txtQ1.GetAttribute("value");
    string text2 = (string)txtQ2.GetAttribute("value");
    double value1, value2;
    if (!double.TryParse(text1, out value1)) value1 = Double.NaN;
    if (!double.TryParse(text2, out value2)) value2 = Double.NaN;
    double result = value1 * value2;
    txtAns.SetAttribute("value", result.ToString());
  };

  txtQ1.AttachEventHandler("onchange", calc);
  txtQ2.AttachEventHandler("onchange", calc);
}

解決済み
引用返信 編集キー/
■10317 / inTopicNo.5)  Re[4]: webBrowser上のテキストの取得と設定
□投稿者/ くまこ (14回)-(2007/11/15(Thu) 15:40:21)
>魔界の仮面弁士さんへ

そうなんですね〜
2.0になってから.NET 用の WebBrowserが追加されたんですね。
それで、他のサイトでちらほら「ActiveXを使う」という説明が上がってたんですね。

>よく見たら...だとするとこうかな
いえいえ!
初回に頂いたアドバイスだけで十分に勉強になりましたよ(^-^)/
でも!!今回の内容は更に更に勉強になりました!!
「delegate」は初顔合わせ、これも勉強しなきゃ(^^;

# これ、面白いですね〜♪
# javascriptプログラミングの経験がC#以上に浅い私(^^;)にとっては、
# webページの値をリアルタイムに操れるこの手法は、とても楽しいです!
# いろいろ夢が膨らみます(^-^)
#
# あ、でも、更新([F5])掛けてしまうと以降は計算されなくなっちゃいますね。
# [F5]によって[DocumentCompleted]イベントが発生しなくなる!?
# う〜ん、なぜでしょうね…。
# 何かわかりましたら、またご教示下さい。

とても勉強になりました(^-^)
ありがとうございました。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -