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

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

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

Re[4]: DragEventHandlerとDragDropについて


(過去ログ 88 を表示中)

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

■52701 / inTopicNo.1)  DragEventHandlerとDragDropについて
  
□投稿者/ とっぱっ (4回)-(2010/08/20(Fri) 21:40:38)

分類:[C#] 

DragDropとDragEventHandlerを使用してフォーム上のTextBoxへのファイルのドラック&ドロップを
試しているのですが
上手くDragEventHandlerを呼び出すことができず困っています。

以下がソースです。

        public Form1()
        {
            InitializeComponent();

            textBox1.DragDrop += new DragEventHandler(TextBox_Drop);
        }

        private void TextBox_Drop(object sender, DragEventArgs e)
        {
            if (e.Data == null)
                return;
        }


textBox1にファイルをドロップ&ドラックしてもTextBox_Dropが呼び出されません

this.textBox1.AllowDrop = true; (textbox)
this.AllowDrop = true; (フォーム)

に設定したのですが、実際にドラック&ドロップすると、カーソルが禁止標示
になってしまいます。

アドバイス、助言等よろしくお願いします。

引用返信 編集キー/
■52702 / inTopicNo.2)  Re[1]: DragEventHandlerとDragDropについて
□投稿者/ Hongliang (688回)-(2010/08/20(Fri) 21:57:09)
DragEnter または DragOver イベントも処理する必要があります。
それらのいずれかで、DragEventArgs の Effect プロパティを、(ドラッグ元の設定である AllowedEffect に合わせて)Copy や Move に設定します。
引用返信 編集キー/
■52703 / inTopicNo.3)  Re[1]: DragEventHandlerとDragDropについて
□投稿者/ 魔界の仮面弁士 (1761回)-(2010/08/20(Fri) 22:05:55)
No52701 (とっぱっ さん) に返信
> textBox1にファイルをドロップ&ドラックしてもTextBox_Dropが呼び出されません
ドロップされるためには、その前に
 「ドラッグされてきたデータが、自アプリで使える形式か否かを検証する」
という作業が必要になります。

DragEnter イベントで e.Data 内のデータ形式と e.AllowedEffect での操作を調べ、
それが有効な情報であった場合に限り、e.Effect で通知するようにしてみて下さい。
(e.Effect に None 以外が設定されると、Drop イベントが発生するはずです)


それと Microsoft 公式には、「ドラック」では無く「ドラッグ」です。<drag
引用返信 編集キー/
■52704 / inTopicNo.4)  Re[2]: DragEventHandlerとDragDropについて
□投稿者/ とっぱっ (6回)-(2010/08/21(Sat) 07:23:59)
アドバイスを参考に処理を追記してみたのですが、
上手くいきません。。。
以下がソースです。
        public Form1()
        {
            InitializeComponent();

            textBox1.DragEnter += new DragEventHandler(TextBox_DragEnter);
            textBox1.DragDrop += new DragEventHandler(TextBox_Drop);

        }

        private void TextBox_Drop(object sender, DragEventArgs e)
        {
            MessageBox.Show("Drop");
        }


        private void TextBox_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data == null)
                return;

            if (e.Data.GetDataPresent("Text"))
            {
                if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)
                {
                    e.Effect = DragDropEffects.Link;
                }
                else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy)
                {
                    e.Effect = DragDropEffects.Copy;
                }
                else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
                {
                    e.Effect = DragDropEffects.Move;
                }
                else
                {
                    return;
                }
            }
            else
            {
                return;
            }

上手くいかないこと1
GetDataPresentを使用して、ドラッグされたデータ形式がTextであるかを調べたい。
DataFormatsメンバに識別名らしきものが、記載されていたので、stringで指定したのですが上手くいきません。

上手くいかないこと2
上記処理を外して、e.AllowedEffect を調べてe.Effectを指定する方のみを実装しても
やはり、TextBox_Dropが呼び出されない。

アドバイス、助言等おねがいします。


引用返信 編集キー/
■52707 / inTopicNo.5)  Re[3]: DragEventHandlerとDragDropについて
□投稿者/ 魔界の仮面弁士 (1762回)-(2010/08/22(Sun) 00:45:53)
2010/08/22(Sun) 12:58:30 編集(投稿者)

No52704 (とっぱっ さん) に返信
> if (e.Data.GetDataPresent("Text"))
あれ、文字列をドラッグ & ドロップしているのでしょうか。
ファイル(DataFormats.FileDrop)をドラッグ & ドロップしているのでは無かったのですか?


> GetDataPresentを使用して、ドラッグされたデータ形式がTextであるかを調べたい。
テキストファイルではなく、文字列かどうかを判断したいという事ですね。

文字列にも幾つかの種類がありますが、そもそも、ドラッグ時にどのようなデータが渡されてくるかは、
ドラッグ元によって異なります。テスト段階ではまず GetFormats などを使って、どのようなデータが
渡されてきているのかを確認しておきましょう。

Console.WriteLine("-----");
Array.ForEach(e.Data.GetFormats(), Console.WriteLine);


> 上記処理を外して、e.AllowedEffect を調べてe.Effectを指定する方のみを実装しても
> やはり、TextBox_Dropが呼び出されない。
まず、ドラッグ時のカーソルがドロップ禁止状態となっている件はクリアできていますか?

少なくとも当方では、 No52704 のコードを(AllowDrop を有効にしてある状態で)実行し、
この Web ページの内容をテキスト反転させてドラッグ & ドロップしたところ、
MessageBox.Show("Drop"); のコードが期待通りに呼び出されました。
引用返信 編集キー/
■52708 / inTopicNo.6)  Re[4]: DragEventHandlerとDragDropについて
□投稿者/ 魔界の仮面弁士 (1763回)-(2010/08/22(Sun) 13:39:13)
No52707 (魔界の仮面弁士 さん) に返信
> まず、ドラッグ時のカーソルがドロップ禁止状態となっている件はクリアできていますか?

なお、Vista 以降のバージョンにおいては、UAC によって
ドラッグ元とドロップ先の組み合わせが限定される可能性があります。
http://kait-field.spaces.live.com/Blog/cns!B90E9B4A3C4DFD66!947.entry
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -