Symfoware

Symfowareについての考察blog

C# 画像やパネルのドラッグ&ドロップ  [Ubuntu 11.04 + Mono]

Ubuntu + Monoで開発できる環境を作りました。
Ubuntu 11.04にC#(Mono)開発環境のMonoDevelop 2.4をインストールする


画像を貼り付けたピクチャーボックスやパネルをドラッグ&ドロップで移動させるソースを
書いたのでメモしておきます。



ソースの内容



リストからリストへドラッグ&ドロップというサンプルはよく見かけるのですが、
同一パネル内で表示しているオブジェクトの移動というサンプルがなかなか見つけられなかったので・・・



using System;
using System.Drawing;
using System.Windows.Forms;

namespace sample
{
    public class test
    {
        public static void Main(String[] args) {
            Application.Run(new Form1());
        }
    }
    
    class Form1 : Form
    {
        Panel panel;
        bool isDraging = false;
        Point? diffPoint = null;
        
        public Form1()
        {
            this.Width = 500;
            this.Height = 300;
            this.Text = "サンプルプログラム";
            
            this.panel = new Panel();
            this.panel.Location = Location = new Point(10, 10);
            this.panel.Size = new Size(100, 100);
            this.panel.MouseDown += new MouseEventHandler(this.pic_MouseDown);
            this.panel.MouseMove += new MouseEventHandler(this.pic_MouseMove);
            this.panel.MouseUp += new MouseEventHandler(this.pic_MouseUp);
            
            this.panel.BackColor = Color.Blue;
            this.panel.BorderStyle = BorderStyle.Fixed3D;
            
            this.Controls.Add(this.panel);
        }
        
        //マウスを押したときにマウスカーソル変更
        //開始座標を退避
        void pic_MouseDown(object sender, MouseEventArgs e) {
            if (e.Button != MouseButtons.Left) {
                return;
            }
            Cursor.Current = Cursors.Hand;
            isDraging = true;
            diffPoint = e.Location;
        }
        
        //クリック状態でマウスを動かしている時は、開始地点からの差分だけ対象を移動
        void pic_MouseMove(object sender, MouseEventArgs e) {
            if (!isDraging) {
                return;
            }
            
            int x = panel.Location.X + e.X - diffPoint.Value.X;
            int y = panel.Location.Y + e.Y - diffPoint.Value.Y;
            
            panel.Location = new Point(x, y);
        }
        
        //マウスを離したときは初期状態に戻す
        void pic_MouseUp(object sender, MouseEventArgs e) {
            if (e.Button != MouseButtons.Left) {
                return;
            }
            Cursor.Current = Cursors.Default;
            isDraging = false;
        }
    }
}




画面に背景色「青」のパネルを貼り、ドラッグ&ドロップで表示している位置を移動します。




動作サンプル



こんな感じです。

[広告] VPS


多分、Windowsでも問題なく動いてくれるかと思います。



【参考URL】

第22回 ドラッグ&ドロップ
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard22.htm

待機状態のマウス・カーソルを表示するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/134waitcursor/waitcursor.html






関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2011/05/29(日) 18:39:12|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<C# ComboBoxにデータを追加、取得  [Ubuntu 11.04 + Mono] | ホーム | Ubuntu 11.04で画面をflv形式で録画する(recordMyDesktop、ffmpeg使用)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/783-75ecf921
この記事にトラックバックする(FC2ブログユーザー)