17181


お世話になります。

フォーム上に貼り付けたボタンに、テキストファイルをドラッグドロップしてきて、  
指定してあるテキストエディタをProcess.Startで立ち上げてファイルを開こうとしています。

ボタンを押すと、テキストエディタが開くということはできますが、それでは  
エクスプローラーから編集したいファイルを開くということが一度にできません。

そのため、ボタンを単純にクリックすれば、引数なしで外部プログラムを起動させ、  
ドラッグドロップならば引数付きで起動するようにしたいと思ったのですが…。

ボタン自体はドラッグドロップは受け付けないのでしょうか。  
AllowDropをTrueにしただけでテストしても、ドラッグ時に×のマウスカーソルの  
ままです。

実装そのものができないのでしょうか。  
それとも、他に何か原因がありますでしょうか。

よろしくお願いいたします。


CC BY-SA 3.0
2015-10-02T07:02:50.877
17178
2015-10-02T07:31:01.847
9374
question
c#
C# ボタンコントロールにドラッグドロップをさせたい


`AllowDrop`を設定しても、ドラッグイベントを処理しなければドロップすることはできません。以下を参考に実装してみて下さい。

[code]

    private void Form1_Load(object sender, EventArgs e)
    {
        button1.AllowDrop = true;
    
        // TODO:デザイナーで以下のイベントを登録する
        button1.DragEnter += button1_DragEnter;
        button1.DragOver += button1_DragEnter;
        button1.DragDrop += button1_DragDrop;
    }
    
    
    // DragEnter, DragOverの実装
    void button1_DragEnter(object sender, DragEventArgs e)
    {
        // 目的の操作(この場合はCopy)ができることと、
        // データの種類を確認する
        if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy
            && e.Data.GetDataPresent(DataFormats.FileDrop))
        {
            // Copyのエフェクトを表示する
            e.Effect = DragDropEffects.Copy;
        }
        else
        {
            // 対応していない場合
            e.Effect = DragDropEffects.None;
        }
    }
    // DragDrop時の処理
    void button1_DragDrop(object sender, DragEventArgs e)
    {
        // DragEnterと同様の判定を行う
        if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy
            && e.Data.GetDataPresent(DataFormats.FileDrop, true))
        {
            // 実際にデータを取り出す
            var data = e.Data.GetData(DataFormats.FileDrop, true) as string [];
    
            // データが取得できたか判定する
            if (data != null)
            {
                foreach (var filePath in data)
                {
                    Console.WriteLine(filePath);
                }
            }
    }
    
[/code]


CC BY-SA 3.0
2015-10-02T07:31:01.847
17181
2015-10-02T07:31:01.847
5750
17178
answer