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

わんくま同盟

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

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


(過去ログ 69 を表示中)
■40397 / )  Re[7]: ウェブブラウザで編集中にドラッグ&ドロップを禁
□投稿者/ 魔界の仮面弁士 (1250回)-(2009/08/24(Mon) 23:14:15)
2009/08/24(Mon) 23:26:24 編集(投稿者)

編集可能な要素は、それ自体の位置をドラッグで変更できる事はご存知ですよね。
しかしそれを、編集不可能な要素の中にドロップさせることはできません。
また、編集不可能な要素をドラッグで移動させることもできません。

そのため今回は、「全体としては編集可能、ただし一部だけ編集不可」
あるいは「全体としては編集不可、ただし一部だけは編集可能」の
いずれかの状態にする事を目標としています。


しかしながら、どの要素を編集可能にして、どの要素を編集不可能にするべきかは、
編集対象の HTML の構成によって異なりますので、解決に至るヒントまでは出せても、
具体的なコードまでは提示することができません。その点は御了承ください。


No40328 (RT さん) に返信
>> (3) .Document.Body や .Document.GetElementFromPoint や .Document.GetElementById などが、
>>   それぞれのタグ(要素)を HtmlElement クラスとして返す事は把握されていますか?
> 確認致しました。

では次に、「HtmlElement クラス」を返すメソッドやプロパティには、どのようなものがあって、
それらはどのようにして使うものなのかを、順に調べていってみてください。


今回の場合、contentEditable の状態を一部の要素だけ変更しようとしていますから、
その変更したい要素がどれであるのか、指定してあげなければいけませんよね。

そのためには、目的の要素を「HtmlElement クラス」として取り出す必要がありますので、
個々のメソッドやプロパティの使い方を学びとっていかなければなりません。


また、複数の HtmlElement をコレクション(HtmlElementCollection クラス)として
返すメンバも存在しますので、そうしたプロパティやメソッドも併せて調査してみてください。

HtmlElementCollection に対しては、先の No39679 でも説明していますように、
それらの中の何番目の要素かを、[0] といった表現で指定したり、あるいは foreach で
列挙したりすることで、目的の要素(HtmlElement)を取り出すことができるはずです。

# HtmlElementCollection を返す物としては、先の GetElementsByTagName メソッド以外にも、
# Children プロパティや All プロパティなどがあります。



>> (4) 今回使用している contentEditable が、<body> 以外にも利用できる事はご存知でしたか?
> どうやって利用出来るのかわかりません。

contentEditable は、HtmlElement クラスの SetAttribute メソッドで設定できます。

対象となる HtmlElement が、<body> でも <div> でも <textarea> でも、SetAttribute の
使い方は一緒です。相手が <body> なら、
 HtmlElement tag = webBrowser1.Document.Body;
 tag.SetAttribute("contentEditable", "true");
などと書けますし、<form> なら、
 HtmlElement tag = webBrowser1.Document.Forms[0];
 tag.SetAttribute("contentEditable", "true");
などと書けます。

ですから GetElementsByTagName や All や Images や NextSibling や Links などといった、
各種メンバを駆使して、目的となる HtmlElement にたどり着くことが現在の最重要課題です。
HTML の内容に併せて、それぞれのメンバを使い分けてみてください。


>> (5) contentEditable は文書全体に対して摘要されるわけでは無く、要素ごとに
>>   個別に設定可能である事はご存知ですか?
> 設定の仕方がわかりません。

上記 (4) の解説に示したとおりです。


>> (6) contentEditable を設定できる要素と、設定できない要素がある事はご存知ですか?
> どのよう要素が設定出来ない要素なのかわかりません。

No40283 で示した URL の内容を、もう一度良く読み返してみてください。
ページの下の方にある「Applies To」の一覧が、『設定可能な要素』の適用表です。


>> (7) contentEditable に指定できる値が、"true" / "false" / "inherit" の
>>  3 種類である事は調査済みですか?
> はい。
>> (8) その 3 種類の値のそれぞれの意味を説明できますか?
> 編集ON,編集OFF、継承ですね。

その通りです。
初期設定は inherit (継承) になっており、上位の要素が true または false になると、
その値が下位の要素にも引き継がれるようになっています。



>> (9) 上位のタグとその子孫のタグとで contentEditable の設定値が異なっていた場合、
>>   どのような動作になるのかを、実際に試して確認してみましたか?
> タグごとの設定がわからないので、まだ確認しておりません。

少なくとも、<body> の HtmlElement に対して適用する事はできていますよね。
また、マウス座標にある HtmlElement を得る方法も知っておられますよね。
No40377 では、ActiveElement を使う方法も見つけられたようです。

という事は RT さんは、少なくとも 2 つ以上の要素を HtmlElement として
取り出す事ができているわけです。

ですからここまでの知識だけでも、上位の要素と下位の要素それぞれに対して、
異なる contentEditable を SetAttribute するという実験を行うだけの知識は
既に身につけておられるはずですよ。
返信 編集キー/


管理者用

- Child Tree -