HeyCHのブログ

慢性疲労のへいちゃんです

【C#】ContextMenuを使って画像を保存/コピーしてみよう

今回の記事は前回の記事の続きという事で書いていきます。
heych.hatenablog.com

PictureBoxにContextMenuを設定(コード)

pictureBox1.ContextMenuに新しいContextMenuを設定してやります。
new MenuItem("-")は、隠しコマンドみたいなもので、セパレーターの役割を果たします。

        public Form1() {
            InitializeComponent();
            pictureBox1.ContextMenu = new ContextMenu(
                                        new MenuItem[]{
                                            new MenuItem("コピー",contextMenu_Copy),
                                            new MenuItem("-"),
                                            new MenuItem("保存",contextMenu_Save),
                                            new MenuItem("-"),
                                            new MenuItem("消去",contextMenu_Delete)
                                        });
        }
        private void contextMenu_Copy(object sender, EventArgs e) {
            MessageBox.Show("コピーが押されました。");
        }
        private void contextMenu_Save(object sender, EventArgs e) {
            MessageBox.Show("保存が押されました。");
        }
        private void contextMenu_Delete(object sender, EventArgs e) {
            MessageBox.Show("消去が押されました。");
        }
        private void textBox1_KeyUp(object sender, KeyEventArgs e) {
            if (e.KeyCode == Keys.Enter) {
                try {
                    pictureBox1.ImageLocation = textBox1.Text;
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message, ex.GetType().ToString());
                }
            }
        }

消去が押された時の処理を書く

        private void contextMenu_Delete(object sender, EventArgs e) {
            pictureBox1.ImageLocation = null;
        }

コピーが押された時の処理を書く

        private void contextMenu_Copy(object sender, EventArgs e) {
            if (pictureBox1.Image == null) return;
            Clipboard.SetDataObject(pictureBox1.Image, true);
        }

保存が押された時の処理を書く

        private void contextMenu_Save(object sender, EventArgs e) {
            if (pictureBox1.Image == null) return;
            var sfd = new SaveFileDialog();
            if (sfd.ShowDialog() == DialogResult.OK) {
                pictureBox1.Image.Save(sfd.FileName);
            }
        }