C#でピクチャボックスを使ってみる2【ドラック&ドロップ対応】

C# コンピュータ
C#

C#でピクチャボックスを作ってみましたが今回はドラック&ドロップ機能を付加してみます。

ソース:Form1.cs

using System;
using System.IO;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Drawing;

// ピクチャボックスのサンプル(ドラック&ドロップ対応)

public class Form1 : Form {
    
    // コンストラクタ
    public Form1() {
        
        this.Load += Form1_Load;
        this.Resize += Form1_Resize;
        this.Shown += Form1_Resize;
    }
    
    
    // ピクチャボックスの生成
    private PictureBox CreatePicbox() {
        PictureBox m = new PictureBox();
        
        m.Name = "PICBOX";
        
        // クリックイベント
        m.Click += (sender, e) => {
            MessageBox.Show("クリックされた。", "EVENT");
        };
        
        // ドラック&ドロップ
        m.AllowDrop = true;
        m.DragEnter += (sender, e) => {
            e.Effect = DragDropEffects.All;
        };
        m.DragDrop += (sender, e) => {
            var pic = (PictureBox)sender;
            var form = (Form1)pic.Parent;
            
            string[] fileName =
                    (string[]) e.Data.GetData(DataFormats.FileDrop, false);
            
            // MessageBox.Show(fileName[0], "ドラック&ドロップ");
            
            form.SetLocatFileToPicBox(fileName[0]);
        };
        
        
        return m;
    }
    
    // ピクチャボックスにローカルファイルをセット
    private void SetLocatFileToPicBox(string path) {
        var picbox = (PictureBox)this.Controls["PICBOX"];
        
        if (picbox.Image != null) {
            picbox.Image.Dispose();
        }
        
        using(FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) {
            picbox.Image = Image.FromStream(fs);
        }
    }
    
    
    // Form1のLoadイベント
    private void Form1_Load(object sender, EventArgs e) {
        
        var controls = new List<Control>();
        
        // ピクチャボックスの設置
        controls.Add(this.CreatePicbox());
        
        
        
        
        // コントロールの追加
        this.Controls.AddRange(controls.ToArray());
        
        this.SetLocatFileToPicBox("H:\\ps1\\resx_image\\folder1.png");
    }
    
    // Form1のリサイズイベント
    private void Form1_Resize(object sender, EventArgs e) {
        var form = (Form)sender;
        var picbox = (PictureBox)form.Controls["PICBOX"];
        
        picbox.Size = form.ClientSize;
    }
    
}

その他のファイルは前回の記事を参照。

実行すると前回と同様なフォームが表示されます。

フォームに画像ファイルをドラック&ドロップしてみます。画像ファイルはjpg、png、bmp辺りが無難です。画像ファイル以外のファイルをドラック&ドロップした場合どうなるか不明ですので、しないでください。

放り込んだ画像が表示されました。

こんかいはここまで。

コメント