Home > Programming > [C#] ダブルクリックでフォームを閉じる&ドラッグでフォームを移動する

[C#] ダブルクリックでフォームを閉じる&ドラッグでフォームを移動する

懐かしいことを聞かれたので。調べたら、VBのコードが多いのね。

ダブルクリックでフォームを閉じたければ、MouseDoubleClick っていうイベントで Close() すればよい。そのほかにも、マウスイベントの e.Clicks を見るという手もある。ここでは、MouseDown で処理したけど、普通は MouseDoubleClick でいい。

ついでに、ドラッグでフォームを移動させる。Delphi 系のサイトではおなじみの初心者向けTIPSだよね。マウスがクリックされたら、マウスのイベント処理を中断して、「タイトルバーで左クリックされたぜ!」とWindowsにウソを教える。移動コマンドを送ってもいい。自分でマウス押し下げ移動→フォームの位置を更新するのはお勧めしない。フレームワークが充実すると、Windows が 「ウィンドウとメッセージでできてる」ことを実感しにくくなるかな。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices; // for DllImport

namespace SampleBorderlessButMovableForm
{
    public partial class Form1 : Form
    {
        [DllImport("User32.dll")]
        public static extern bool ReleaseCapture();

        [DllImport("User32.dll")]
        public static extern int SendMessage(
			IntPtr hWnd, int Msg, int wParam, int lParam);

        const int WM_NCLBUTTONDOWN = 0xA1;
        const int WM_SYSCOMMAND = 0x112;
        const int SC_MOVE = 0xF010;
        const int HTCAPTION = 2;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (e.Clicks > 1) // double click, and more ...
                {
                    Close();
                }
                else
                {
                    ReleaseCapture();
                    SendMessage(
						Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
					/* SendMessage (
						Handle, WM_SYSCOMMAND, SC_MOVE + 2, 0); */
                }
            }
        }
    }
}

でも、ぶっちゃけこういうコードは使わずに、標準的な動作に準拠したほうがいいと思うのさ。わざわざタイトルバーを消す必要があるんすかねーとか、考えてみてもいいかもね。やってみたい気持ちもわかるけど!w

SC_MOVE “+ 2” はマウスでの移動ってことで、SC_MOVE だけだとキーボードでの移動になるらしい。

Home > Programming > [C#] ダブルクリックでフォームを閉じる&ドラッグでフォームを移動する

My Friend Feed

http://friendfeed.com/daruyanagi

Google Analyticator

608
 Unique Visitors 
 (1 day) 
Powered By Google Analytics

Return to page top