WinFormsアプリからドラッグアンドドロップでエクスプローラーへファイルをコピーするサンプル

C# コンピュータ
C#
namespace MyPicbox2;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        string file = @"C:\Users\karet\Pictures\20230614194024.png";

        var picbox = new PictureBox
        {
            Dock = DockStyle.Fill,
        };
        using var fs = new FileStream(file, FileMode.Open, FileAccess.Read);
        picbox.Image = Bitmap.FromStream(fs);
        Controls.Add(picbox);

        picbox.MouseDown += (s, e) =>
        {
            if (e.Button == MouseButtons.Left)
            {
                var effect = DragDropEffects.Copy | DragDropEffects.Move;
                string[] paths = {file};
                IDataObject data = new DataObject(DataFormats.FileDrop, paths);
                var result = picbox.DoDragDrop(data, effect);

                if ( result == DragDropEffects.None)
                {
                    MessageBox.Show("D&D failed.");
                }
            }
        };
    }
}

string fileに画像ファイルのパスを設定しています。プログラムを実行するとfileの画像ファイルを読み込みPictureBoxに画像を表示します。
表示された画像をマウスでドラッグしエクスプローラーにドロップすると画像ファイルがコピーされます。シフトキーを押した状態でエクスプローラーにドロップするとファイルが移動されます。
ファイルのコピーや移動処理をプログラミングしていないので、ドロップ側のエクスプローラーで処理していると思われます。

試しに画像ファイルを「ペイント」や「GIMP」などの画像編集ソフトにD&Dにしたところ画像を開くことが出来ました。自作アプリケーションにD&Dを組み込むことで、他のアプリケーションとの連携でアプリケーションの使い勝手をよくすることが出来そうです。具体的には自作アプリで画像をスライドショーで表示しながら目的の画像を探し、見つかったらペイントソフトへD&Dが出来ると便利そうです。と思ったのですがWindows11の標準の画像ビューアはズバリその機能があることに今気が付きました。
まぁ難にしてもD&Dで出来ることが増えたので今後に生かしたいと思います。

コメント