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

わんくま同盟

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

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

ツリー一括表示

ドラッグアンドドロップについて /謎の人 (19/08/06(Tue) 19:14) #91826
Re[1]: ドラッグアンドドロップについて /Hongliang (19/08/06(Tue) 19:32) #91827
  └ Re[2]: ドラッグアンドドロップについて /謎の人 (19/08/07(Wed) 18:06) #91858
    └ Re[3]: ドラッグアンドドロップについて /Hongliang (19/08/07(Wed) 19:35) #91865
      └ Re[4]: ドラッグアンドドロップについて /774RR (19/08/08(Thu) 08:27) #91878
        └ Re[5]: ドラッグアンドドロップについて /謎の人 (19/08/09(Fri) 10:21) #91904 解決済み


親記事 / ▼[ 91827 ]
■91826 / 親階層)  ドラッグアンドドロップについて
□投稿者/ 謎の人 (1回)-(2019/08/06(Tue) 19:14:25)

分類:[C#] 

初心者です。
●フォームへのドロップ
●EXEまたはEXEのショートカットへのドロップ
の双方で、ドロップしたファイルを処理するように書くことはできるのでしょうか?
[ □ Tree ] 返信 編集キー/

▲[ 91826 ] / ▼[ 91858 ]
■91827 / 1階層)  Re[1]: ドラッグアンドドロップについて
□投稿者/ Hongliang (851回)-(2019/08/06(Tue) 19:32:01)
できます。それぞれ全く別経路にはなりますが。

フォームへのドロップは、FormのDragOverイベントやDragDropイベントで処理することになります。詳しくは「フォーム ファイル ドロップ」などで検索すると出てくるでしょう。

exeやそのショートカットへのドロップは、「新しくその実行ファイルが起動し、そのコマンドライン引数にファイルパスが渡される」という動作になります。
コマンドライン引数は、Mainメソッドの引数として取得することができます。ほかにもEnvironment.GetCommandlineArgs()メソッドによって任意のところで取得することもできます。
ちなみに、「アプリが既に起動中の場合、新しいアプリを起動するのではなく実行中のアプリにドロップされたファイルを渡す」のは結構ハードルが高いです。
[ 親 91826 / □ Tree ] 返信 編集キー/

▲[ 91827 ] / ▼[ 91865 ]
■91858 / 2階層)  Re[2]: ドラッグアンドドロップについて
□投稿者/ 謎の人 (2回)-(2019/08/07(Wed) 18:06:22)
回答ありがとうございます。

ウィンドウへのDDと引数の取得はできているのですが、
引数を private void xxx_DragDrop内の処理に渡す方法がわかりません…。
考え方自体が間違っているのかもしれませんが。
[ 親 91826 / □ Tree ] 返信 編集キー/

▲[ 91858 ] / ▼[ 91878 ]
■91865 / 3階層)  Re[3]: ドラッグアンドドロップについて
□投稿者/ Hongliang (853回)-(2019/08/07(Wed) 19:35:29)
> 引数を private void xxx_DragDrop内の処理に渡す方法がわかりません…。
> 考え方自体が間違っているのかもしれませんが。

一概には言えませんが、基本的にはよくない考え方といっていいでしょう。
こうするのがより良い記述といえます。

class Program {
    static void Main(string[] args) {
        // 引数の検証は略
        Form1 form = new Form1();
        form.AddFiles(args);
        Application.Run(form);
    }
}

class Form1 : Form {
    private void Form1_DragDrop(object sender, DragDropEventArgs e) {
        // 略
        string[] files = e.Data.GetData(...);
        this.AddFiles(files)l
    }
    public void AddFiles(string[] files) {
        // とりあえずリストボックスに全部追加する
        this.ListBox1.Items.AddRange(files);
    }
}

[ 親 91826 / □ Tree ] 返信 編集キー/

▲[ 91865 ] / ▼[ 91904 ]
■91878 / 4階層)  Re[4]: ドラッグアンドドロップについて
□投稿者/ 774RR (721回)-(2019/08/08(Thu) 08:27:23)
オイラが過去に組んだソフトで、ショートカットにD&Dしたら起動済みアプリに処理を投げるのは

using Microsoft.VisualBasic.ApplicationServices;
して StartupNextInstance を使っていたっす
https://dobon.net/vb/dotnet/process/checkprevinstance.html

[ 親 91826 / □ Tree ] 返信 編集キー/

▲[ 91878 ] / 返信無し
■91904 / 5階層)  Re[5]: ドラッグアンドドロップについて
□投稿者/ 謎の人 (3回)-(2019/08/09(Fri) 10:21:36)
すみません、解決済みとしました。
解決済み
[ 親 91826 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -