■72959 / inTopicNo.15) |
Re[9]: エンターを押せないようにする |
□投稿者/ 魔界の仮面弁士 (72回)-(2014/08/04(Mon) 19:52:59)
|
■No72958 (よしむら さん) に返信 > 上記の@idのidで判定している部分をnameで判定するには
id 属性は、HTMLページ内で重複しませんが、 name 属性は、同じ値が複数個所で使われる可能性があります。
だからこそ、 IHTMLDocument3.getElementById メソッド HtmlDocument.GetElementById メソッド などは、単数形の「Element」の名を冠しており、 IHTMLDocument3.getElementsByName メソッド などは、複数形の「Elements」なわけですね。
「複数形」なのは、IHTMLDocument3.getElementsByTagName や HtmlDocument.GetElementsByTagName も同様なので、提示された > Func<string, HtmlElementCollection> @name = webBrowser1.Document.GetElementsByTagName; > @name("p").KeyPress += (t, a) => { a.ReturnValue = a.KeyPressedCode != 13; }; の書き方をするなら、 @name("p")[位置番号].KeyPress += (t, a) => { /***/ }; のように、どの <p> タグなのかを特定しないといけません。
http://www.goo.ne.jp/ をお題としてサンプル化してみました。 今回の処理対象は以下のタグです。(今回は id 属性は使いませんが) <input type="text" id="searchtop" name="MT"> <input type="submit" id="hd-s-1" name="bt_search">
★案1:.Document.All で全列挙し、そこから名前が一致するものを捜索
private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate("http://www.goo.ne.jp/"); WebBrowserDocumentCompletedEventHandler action = null; Func<string, HtmlElement> @name = delegate(string n) { // 今回は、LINQ で問い合わせてみた return webBrowser1.Document.All.OfType<HtmlElement>().Where(tag => tag.Name == n).FirstOrDefault(); }; action = (wb, args) => { @name("bt_search").Click += delegate { MessageBox.Show("検索しましたね!"); }; @name("MT").KeyPress += (t, a) => { a.ReturnValue = a.KeyPressedCode != 13; }; webBrowser1.DocumentCompleted -= action; }; webBrowser1.DocumentCompleted += action; }
★案2:タグ名で絞り込んでから、さらに name 属性で探す
public IEnumerable<HtmlElement> GetTags(string tagName, string name) { // 今回は反復子を使ってみた foreach (HtmlElement tag in webBrowser1.Document.GetElementsByTagName(tagName)) { if (tag.Name == name) yield return tag; } }
private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate("http://www.goo.ne.jp/"); WebBrowserDocumentCompletedEventHandler action = null; action = (wb, args) => { GetTags("input", "bt_search").First().Click += delegate { MessageBox.Show("検索しましたね!"); }; GetTags("input", "MT").First().KeyPress += (t, a) => { a.ReturnValue = a.KeyPressedCode != 13; }; webBrowser1.DocumentCompleted -= action; // 一度呼ばれたら直ちに解除 }; webBrowser1.DocumentCompleted += action; }
|
|