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

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

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

Re[6]: ウェブブラウザで表示した画像をクリックした時にパスを取得


(過去ログ 69 を表示中)

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

■40213 / inTopicNo.1)  ウェブブラウザで表示した画像をクリックした時にパスを取得
  
□投稿者/ RT (86回)-(2009/08/21(Fri) 14:02:35)

分類:[C#] 

2009/08/21(Fri) 15:43:12 編集(投稿者)
2009/08/21(Fri) 15:33:43 編集(投稿者)
2009/08/21(Fri) 14:21:57 編集(投稿者)

<pre><pre>たびたびお世話になります。RTです。

C#を始めて、1か月になります。Visual C# Express Edition で、開発を行っております。

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
textBox1.Text = webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(Control.MousePosition)).InnerText;
}

↑のコードで、ウェブブラウザ上でポイントをした部分のテキストが、PreviewKeyDownイベントで取得できます。

同じような感じで、画像をクリックとかした時に、テキストボックス等にそのパスを取得したいのですが、どうすればよいでしょうか?アドバイスお願いします。</pre></pre>
引用返信 編集キー/
■40214 / inTopicNo.2)  Re[1]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ gtk2k (57回)-(2009/08/21(Fri) 14:06:26)
src属性の値を取得すればできると思う。

Dim src As String = elm.GetAttribute("src")

引用返信 編集キー/
■40215 / inTopicNo.3)  Re[2]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ 774RR (380回)-(2009/08/21(Fri) 14:16:28)
たとえ src 属性を拾ってきたとしても、対応する物理的ファイルはない可能性があるので注意。
cgi 等でダイナミックに作成していたりとか・・・
引用返信 編集キー/
■40220 / inTopicNo.4)  Re[3]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ RT (87回)-(2009/08/21(Fri) 15:40:05)
>src属性の値を取得すればできると思う。

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
textBox1.Text = webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(Control.MousePosition)).GetAttribute("src");
}

↑で絶対パスは取得することは出来ました。しかし相対パスの取り方がわかりません。

一回サーバーのファイルをローカルに保存してから、↑のようなコードで、ウェブブラウザ上に表示したページの画像上で、PreviewKeyDownイベントを実行したら、相対パスが取れるでしょうか?あと、PreviewKeyDownイベントではなくて、画像をクリックしたときに情報がほしいので、そのやり方についてのアドバイスもお願いします。
引用返信 編集キー/
■40224 / inTopicNo.5)  Re[4]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ επιστημη (2131回)-(2009/08/21(Fri) 16:17:42)
επιστημη さんの Web サイト
> ↑で絶対パスは取得することは出来ました。しかし相対パスの取り方がわかりません。

絶対の相対の、なんてことじゃなく、
単に <img src="なんやかんや" ... の "なんやかんや" を拾ってきているだけじゃないかしら。

引用返信 編集キー/
■40225 / inTopicNo.6)  Re[4]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ 魔界の仮面弁士 (1239回)-(2009/08/21(Fri) 16:20:18)
2009/08/21(Fri) 16:29:47 編集(投稿者)

No40220 (RT さん) に返信
> textBox1.Text = webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(Control.MousePosition)).GetAttribute("src");
> ↑で絶対パスは取得することは出来ました。しかし相対パスの取り方がわかりません。

たとえば、http://example.com/test/ というサイトに、
 <img src="./sample.png">
のような HTML が書いてあったとします。


この場合、HtmlElement.GetAttribute メソッドで src を得た場合、それは
 "./sample.png"
ではなく、
 "http://example.com/test/sample.png"
が返されます。

もし、元の "./sample.png" という形式が欲しいのだとしたら、
IHTMLElement.getAttribute メソッドを使い、その第 2 引数に
「2」または「3」を指定してみてください。
http://msdn.microsoft.com/en-us/library/aa752280.aspx


--- 以下、回答漏れがあったので追記 ---

> 画像をクリックしたときに情報がほしいので、
onclick イベントを利用してみてください。

アンマネージ DOM ならば、IHTMLElement.onclick、
マネージ DOM ならば、HtmlElement.AttachEventHandler を使います。

onclick イベントへの割り当ては、個々の <IMG> 等に割り当てておいても良いですし、あるいは
<BODY> 等の上位ノードに割り当てておき、そこでバブルアップしてきたイベントを捉えても良いでしょう。

DOM におけるイベントモデルの考え方については、下記の資料を参照してください。
http://msdn.microsoft.com/ja-jp/library/cc392318.aspx

また、DOM が持つ個々のプロパティやメソッドの扱いについては、それぞれの SDK をご覧下さい。
引用返信 編集キー/
■40228 / inTopicNo.7)  Re[5]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ επιστημη (2133回)-(2009/08/21(Fri) 16:22:01)
επιστημη さんの Web サイト
> この場合、HtmlElement.GetAttribute メソッドで src を得た場合、それは
>  "./sample.png"
> ではなく、
>  "http://example.com/test/sample.png"
> が返されます。

あ、そーなのか。
そいつぁ失礼しましたー。

引用返信 編集キー/
■40232 / inTopicNo.8)  Re[5]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ RT (88回)-(2009/08/21(Fri) 17:19:55)
No40225 (魔界の仮面弁士 さん) に返信


> IHTMLElement.getAttribute メソッドを使い、その第 2 引数に
> 「2」または「3」を指定してみてください。
> http://msdn.microsoft.com/en-us/library/aa752280.aspx

> onclick イベントを利用してみてください。

> アンマネージ DOM ならば、IHTMLElement.onclick、
> マネージ DOM ならば、HtmlElement.AttachEventHandler を使います。

> また、DOM が持つ個々のプロパティやメソッドの扱いについては、それぞれの SDK をご覧下さい。

DOM、SDKの意味は分りました。しかし、個々のプロパティやメソッドの扱いは分りません。教えてください。
引用返信 編集キー/
■40234 / inTopicNo.9)  Re[6]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ かずき (42回)-(2009/08/21(Fri) 17:29:37)
かずき さんの Web サイト
横から失礼します。

No40232 (RT さん) に返信
> DOM、SDKの意味は分りました。しかし、個々のプロパティやメソッドの扱いは分りません。教えてください。

使ってみたり、ドキュメントを読んでみたり、Googleとかで調べてみたりして
今回自分がやるのに必要そうな機能に少しアタリをつけてから、その内容について
質問したほうがいいと思います。

全部を教えろというのは、ちょっと膨大すぎて無理なような気がします。
引用返信 編集キー/
■40237 / inTopicNo.10)  Re[6]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ Jitta on the way (403回)-(2009/08/21(Fri) 18:28:35)
No40232 (RT さん) に返信
> DOM、SDKの意味は分りました。しかし、個々のプロパティやメソッドの扱いは分りません。教えてください。

それを、ドキュメント読んで学べと言われているのだけれど?

ここは学校じゃないんだ。自分で調べて、まず、先輩や上司に聞く。
あなたを教育する責任は、まずあなたの雇用主にあります。まず、雇用主に教育の機会を提供してもらう。その上での応用を、掲示板で尋ねる。
引用返信 編集キー/
■40246 / inTopicNo.11)  Re[5]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ RT (89回)-(2009/08/21(Fri) 20:20:08)
2009/08/21(Fri) 20:22:25 編集(投稿者)

>あなたを教育する責任は、まずあなたの雇用主にあります。まず、雇用主に教育の機会を提供してもらう。

色んな所から、知識を吸収出来るように頑張ります。


>もし、元の "./sample.png" という形式が欲しいのだとしたら、
>IHTMLElement.getAttribute メソッドを使い、その第 2 引数に
>「2」または「3」を指定してみてください。
>http://msdn.microsoft.com/en-us/library/aa752280.aspx

読解力がないせいか、↑のmsdnのどこにヒントがあるのかわかりません。メソッドの使い方の例も載ってないみたいです。

引用返信 編集キー/
■40248 / inTopicNo.12)  Re[6]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ orz... (1回)-(2009/08/21(Fri) 20:46:03)
No40246 (RT さん) に返信
> >http://msdn.microsoft.com/en-us/library/aa752280.aspx
> 読解力がないせいか、↑のmsdnのどこにヒントがあるのかわかりません。メソッドの使い方の例も載ってないみたいです。
>

あなたに読解力が無いかどうかはしりませんが、仮に無いとしても、そいう姿勢では、いつまでたっても読解力なんて身につきませんよ。

あるページを教えてもらったら、そのページだけを読んで「ああ、書いてあること、わかんねぇ。」なんて言ってないで、わかんない部分をGoogleさんに尋ねて、いろんなページを渡り歩く、本屋に駆け込む、などして、「自分が何処までやりつくしたか」を明示した上で、わからない部分を人様に質問しましょうね。



引用返信 編集キー/
■40250 / inTopicNo.13)  Re[7]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ RT (90回)-(2009/08/21(Fri) 20:54:12)
2009/08/21(Fri) 21:14:25 編集(投稿者)


IHTMLElement.getAttribute メソッド
↑を使いたいのですが、どうしても使い方が分りません。
引用返信 編集キー/
■40251 / inTopicNo.14)  Re[8]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ RT (91回)-(2009/08/21(Fri) 21:12:36)
2009/08/21(Fri) 21:15:36 編集(投稿者)

ミス
引用返信 編集キー/
■40252 / inTopicNo.15)  Re[8]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ やじゅ (1246回)-(2009/08/21(Fri) 21:35:13)
やじゅ さんの Web サイト
2009/08/21(Fri) 21:38:13 編集(投稿者)

No40250 (RT さん) に返信
> IHTMLElement.getAttribute メソッド
> ↑を使いたいのですが、どうしても使い方が分りません。

RTさんは既に使ってるじゃないですか
> textBox1.Text = webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(Control.MousePosition)).GetAttribute("src");
> ↑で絶対パスは取得することは出来ました。しかし相対パスの取り方がわかりません。


魔界の仮面弁士さんが、第 2 引数に「2」または「3」を指定してみてくださいって言ってるんですよ。
.GetAttribute("src",2);  または .GetAttribute("src",3);  ちなみに3は、1+2の組み合わせの意味です。

>http://msdn.microsoft.com/en-us/library/aa752280.aspx
> 読解力がないせいか、↑のmsdnのどこにヒントがあるのかわかりません。メソッドの使い方の例も載ってないみたいです。

これをふまえて、再度そのサイトを見てみる。
引用返信 編集キー/
■40253 / inTopicNo.16)  Re[6]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ 魔界の仮面弁士 (1242回)-(2009/08/21(Fri) 21:59:15)
No40246 (RT さん) に返信
>> もし、元の "./sample.png" という形式が欲しいのだとしたら、
>> IHTMLElement.getAttribute メソッドを使い、その第 2 引数に
>> 「2」または「3」を指定してみてください。
>> http://msdn.microsoft.com/en-us/library/aa752280.aspx
> 読解力がないせいか、↑のmsdnのどこにヒントがあるのかわかりません。

足りないのは読解力ではなく、それを理解するための基礎知識と経験だと思います。


ただ、MSDN に書かれている内容を、完全に理解する必要は無いですよ。
今の段階では、拾い読みが出来れば充分です。

それにその URL は、参考資料として提示しただけであって、処理に必要な手順は
私の発言の中に盛り込まれています。URL の事はいったん忘れてよいので、
先の発言を、もう一度読み返してみてください。


まず、対象の HtmlElement を得る事は、既に No40220 で出来ているわけですよね。

また、その HtmlElement から、「IHTMLElement」というアンマネージ インターフェイスを
得るための C# での実装例は、今までのやりとりで既に登場していますよね。(覚えていますか?)

そして、その IHTMLElement には、「getAttribute」というメソッドがあるはずですが、
それは見つかりましたか?

あとはそれを使うだけですが、その getAttribute のメソッド引数に何を渡すべきかという情報も、
先の発言にヒントが記されているはずです。

まずはここまでの情報を元に、もう一度試行錯誤してみてください。



> メソッドの使い方の例も載ってないみたいです。

具体的なサンプルが提示されないと先に進めないという状況だとしたら、
今の方針のまま進めていくのは、相当の茨の道になってしまうでしょう。


WebBrowser はすべての機能がマネージ化されているわけではありません。

少し突っ込んだ事を行おうとすると、今まで何度か紹介してきたように、
mshtml や ShDocVw などのアンマネージの世界に手を出さねばなりません。
その意味において、今回実装しようとしている方法は、開発難易度は相当高いです。

しかもアンマネージ部分の公式資料を得るために、MSDN の英語版を
頼ることになるはずですが、具体的なサンプルは少ないですし、
実際に試さないと分からない事も多いかと思います。

WebBrowser を使いこなそうとするのであれば、せめて MSDN を
流し読みできる程度の力を蓄えることが肝要かと。

# 関連資料に一通り目を通しておかないと、やろうとしている事が、
# そもそも技術的に可能なのかどうかを判断することすら出来ませんよね。
引用返信 編集キー/
■40254 / inTopicNo.17)  Re[9]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ 魔界の仮面弁士 (1243回)-(2009/08/21(Fri) 22:04:17)
2009/08/21(Fri) 22:20:06 編集(投稿者)
No40252 (やじゅ さん) に返信
>>IHTMLElement.getAttribute メソッド
>>↑を使いたいのですが、どうしても使い方が分りません。
> 
> RTさんは既に使ってるじゃないですか
>>textBox1.Text = webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(Control.MousePosition)).GetAttribute("src");
それは  HtmlElement.GetAttribute ですよね。
今回の IHTMLElement.getAttribute とは別物ですよ。

> .GetAttribute("src",2);  または .GetAttribute("src",3);
マネージ版に、string, int のオーバーロードはありませんので、
アンマネージ版の方を呼び出してみてください。>RTさん


> ちなみに3は、1+2の組み合わせの意味です。
間違いではありませんが、正確には 1|2 ですね。

引用返信 編集キー/
■40255 / inTopicNo.18)  Re[10]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ やじゅ (1248回)-(2009/08/21(Fri) 22:55:04)
やじゅ さんの Web サイト
2009/08/21(Fri) 23:55:51 編集(投稿者)
2009/08/21(Fri) 23:20:38 編集(投稿者)

No40254 (魔界の仮面弁士 さん) に返信
> それは HtmlElement.GetAttribute ですよね。
> 今回の IHTMLElement.getAttribute とは別物ですよ。

別物ですか(^^;

学ぶときは、素直になることですね。
間違ったら間違ったことを認めて、学びなおす。

まーいいや、ヒント

No39678
mshtml.IHTMLElement tag = (mshtml.IHTMLElement)tags[0].DomElement;
引用返信 編集キー/
■40274 / inTopicNo.19)  Re[7]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
□投稿者/ RT (93回)-(2009/08/22(Sat) 19:42:04)
2009/08/22(Sat) 19:55:00 編集(投稿者)

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{

mshtml.IHTMLElement tags = (mshtml.IHTMLElement)webBrowser1.Document.GetElementFromPoint(webBrowser1.PointToClient(Control.MousePosition)).DomElement;

textBox1.Text =(string)tags.getAttribute("src",2);

}

今まで教えて頂いたアドバイスを分析して、ようやく↑のようなコードで、相対パスを取得することが出来ました。

後は、ウェブブラウザに表示したページの画像をクリックした時のイベントで相対パスを取る方法についてですが、もう少しアドバイスをお願いします。
引用返信 編集キー/
■40281 / inTopicNo.20)  Re[8]: ウェブブラウザで表示した画像をクリックした時にファイル名取得
 
□投稿者/ RT (96回)-(2009/08/23(Sun) 11:14:53)
2009/08/23(Sun) 11:25:27 編集(投稿者)

以前教えてもらっていたコードを見落としてました。全然気が付きませんでした。

webBrowser_Main.Document.Body.AttachEventHandler("onclick", delegate
{
this.label2.Text = "";
HtmlElement tag = webBrowser_Main.Document.ActiveElement; // event.srcElement の代用
while (tag != null && tag.TagName != "TD") tag = tag.Parent;
if (tag != null)
{
this.label2.Text = tag.InnerText;

}
});

↑のコードで、クリックイベントが取れるはずですが、webブラウザに表示されたページが編集モードになっている場合、イベントが取れません。なにかいい案はないでしょうか

webBrowser_Main.Document.Body.AttachEventHandler("onclick", delegate
{
webBrowser_Main.Document.Body.SetAttribute("contentEditable", "false");
this.label2.Text = "";
HtmlElement tag = webBrowser_Main.Document.ActiveElement; // event.srcElement の代用
while (tag != null && tag.TagName != "TD") tag = tag.Parent;
if (tag != null)
{
this.label2.Text = tag.InnerText;

}
});

↑のように

webBrowser_Main.Document.Body.SetAttribute("contentEditable", "false");

を入れてみた所、編集モードが終わり、画像のクリックイベントが取れるようになりました。

ですが、通常の表示状態になると、クリックした時に、リンク先へ飛んでしまいます。

@編集モードから通常の表示モードへの切り替えを行う方法
以外の方法

A編集モードから通常の表示モードへの切り替えを行い、リンク先へのジャンプを防ぐ方法

どちらかで、いい方法はないでしょうか?
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -