Windowsフォームアプリで、クライアント領域(タイトルバー以外の領域)をドラッグしてフォームを移動させる方法を解説します。
はじめに
WindowsフォームでカスタムUIを作っていると、フォームのタイトルバーを非表示にしたくなることがあります。
しかしそうすると、「ドラッグで移動できない」問題にぶつかります。
今回は、クライアント領域をドラッグしてフォームを移動する方法を紹介します。
ソースコード
以下がソースコードになります。
このコードでは、フォーム全体をドラッグ対象としており、WinAPIを使用して実装しています。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
// ウィンドウ移動用のWinAPI
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
public Form1()
{
InitializeComponent();
// フォーム全体をドラッグ対象にする
this.MouseDown += new MouseEventHandler(Form1_MouseDown);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
}
}
}
今回は簡単にフォーム全体をドラッグ出来るようにしていますが、今後はラベルなどのコントロールをドラッグすることでフォームを移動させるような機能などもご紹介していければと思います。
リンク
コメント