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

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

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

Re[4]: RichTextBoxでコピペやドラッグドロップの制限方法


(過去ログ 85 を表示中)

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

■50709 / inTopicNo.1)  RichTextBoxでコピペやドラッグドロップの制限方法
  
□投稿者/ 魚ベイベー (1回)-(2010/06/16(Wed) 05:17:31)

分類:[VB.NET/VB2005 以降] 

VB2008です。
RichTextBoxでコピペやドラッグ&ドロップでのテキスト挿入を行おうと考えていますが、
クリップボードにコピーされているものがテキストまたはリッチテキストであるかどうかを判断する方法はあるでしょうか?
(例えばイメージやファイルは上記から除外される。オブジェクトの場合、リッチテキストならOK。)

また、コピペの場合は上記判断でOKならばClipboard.Paste()を行えばよいのですが、
ドラッグ&ドロップの場合は上記判断でNGの場合、RichTextBoxではドロップを行えないように
駐車禁止マークのようなものを出したいのですが、どうすればいいのでしょうか?

よろしくお願い申し上げます。m(_ _)m
引用返信 編集キー/
■50711 / inTopicNo.2)  Re[1]: RichTextBoxでコピペやドラッグドロップの制限方法
□投稿者/ やじゅ (1650回)-(2010/06/16(Wed) 06:35:14)
やじゅ さんの Web サイト
2010/06/16(Wed) 10:33:08 編集(投稿者)
2010/06/16(Wed) 06:37:58 編集(投稿者)

No50709 (魚ベイベー さん) に返信
> RichTextBoxでコピペやドラッグ&ドロップでのテキスト挿入を行おうと考えていますが、
> クリップボードにコピーされているものがテキストまたはリッチテキストであるかどうかを判断する方法はあるでしょうか?
> (例えばイメージやファイルは上記から除外される。オブジェクトの場合、リッチテキストならOK。)

Clipboard.GetFormat(vbCFRTF)で判断できそうです。
訂正 vbCFRTF→System.Windows.Forms.DataFormats.Rtf
http://msdn.microsoft.com/ja-jp/library/cc438247(VS.71).aspx

第22回 ドラッグ&ドロップ
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard22.htm
引用返信 編集キー/
■50715 / inTopicNo.3)  Re[2]: RichTextBoxでコピペやドラッグドロップの制限方法
□投稿者/ 魔界の仮面弁士 (1666回)-(2010/06/16(Wed) 09:19:54)
No50709 (魚ベイベー さん) に返信
> クリップボードにコピーされているものがテキストまたはリッチテキストであるかどうかを判断する方法はあるでしょうか?
今回の判定には Clipboard の ContainsData メソッドを利用できるかと思います。

もしくは Clipboard.GetDataObject() で取得したオブジェクトに対して
GetDataPresent メソッド や GetFormats メソッドを呼び出しても判断できます。


なお当方環境で、ワードパッド上のテキストをクリップボードに取り込んで確認したところ、
上記 GetFormats メソッドからは、以下の形式が取得されました。
これらの中から、目的に合う物を探して利用してみて下さい。

 "Rich Text Format"
 "Rich Text Format Without Objects"
 "RTF As Text"
 "Text"
 "UnicodeText"
 "RTF in UTF8"
 "RTF with NCRs for nonASCII"
 "Embed Source"
 "Object Descriptor"
 "MetaFilePict"

ちなみに、Word からコピーした場合には、
 "Object Descriptor"
 "Rich Text Format"
 "HTML Format"
 "Text"
 "UnicodeText"
 "EnhancedMetafile"
 "MetaFilePict"
 "Embed Source"
 "Link Source"
 "Link Source Descriptor"
 "ObjectLink"
が返されました。実行環境や文書内容によっては、別の一覧になるかも知れません。


> ドラッグ&ドロップの場合は上記判断でNGの場合、RichTextBoxではドロップを行えないように
> 駐車禁止マークのようなものを出したいのですが、どうすればいいのでしょうか?
ドロップターゲット側(この場合は RichTextBox)のドラッグ系イベント内で、
e.Data からデータ形式を判断した上で、e.Effect を None に指定してやれば OK です。
e.AllowedEffect の確認も忘れずに


No50711 (やじゅ さん) に返信
> Clipboard.GetFormat(vbCFRTF)で判断できそうです。
それは VB6 の場合ですよね。VB2008 では使えないかと。
引用返信 編集キー/
■50987 / inTopicNo.4)  Re[3]: RichTextBoxでコピペやドラッグドロップの制限方法
□投稿者/ 魚ベイベー (2回)-(2010/06/23(Wed) 09:38:07)
亀レスですみません。
RichTextBoxには、テキスト(書式付含む)のみのペースト・ドラッグ&ドロップを許可しますので、
ペーストの判断はClipboard.GetDataObject.GetDataPresent(DataFormats.Text)で行い、
ドラッグ&ドロップの判断はDragOverイベントで、e.Data.GetDataPresent(DataFormats.Text)で行うことにします。
(ここで、上記判断でFalseとなった時、e.Effect = DragDropEffects.Noneにすれば、駐車禁止マークのような
ドロップ不許可マークを表示することができました。)

素朴な質問ですが、RichTextBoxのDragOverイベントとDragEnterイベントとはどう違うのでしょうか?
(そもそも、RichTextBoxのDragOverイベントでは、コード編集時に候補すら出てこなかったのですが、
次の質問ではDragOverを使うと書いてありましたので...
http://bbs.wankuma.com/index.cgi?mode=al2&namber=46862&KLOG=79
引用返信 編集キー/
■51028 / inTopicNo.5)  Re[4]: RichTextBoxでコピペやドラッグドロップの制限方法
□投稿者/ Hongliang (652回)-(2010/06/23(Wed) 17:47:36)
> 素朴な質問ですが、RichTextBoxのDragOverイベントとDragEnterイベントとはどう違うのでしょうか?
> (そもそも、RichTextBoxのDragOverイベントでは、コード編集時に候補すら出てこなかったのですが、

DragEnter はマウスカーソルがコントロールに入ったときにだけ発生します。
DragOver はコントロール上でマウスが動くごとに発生します。TreeView の特定のノードにだけドロップを許すといった動作の時などのときに使用します。

RichTextBox.DragOver は、ヘルプによると
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.richtextbox.dragover.aspx
使うな、だそうですね。その一環として、BrowsableAttribute 属性によって表示されないように指定されています。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -