2012-11-20 37 views
6

私はWinFormsプロジェクトを持っています。私は窓の上にパネルを持っています。私はそのパネルがウィンドウを動かすことができるようにしたい、ユーザーがそれをクリックしてからドラッグすると、コントロールをクリックしてドラッグしてウィンドウを移動する

どうすればいいですか?

+1

Googleはこれが重複であるかもしれないと言います/ 30184/winforms-click-drag-anywhere-in-the-form-to-the-click-in-the-form – rie819

+2

いいえ!そうではない。私はユーザーがフォーム内の任意の場所にウィンドウを移動できるようにしたくありません。私は、ユーザーが 'panel1'コントロールからウィンドウを移動できるようにしたい。 – Victor

+2

googleで" Daniel Moth、Vista Glass "を検索する。彼のチュートリアルでは、これを行う方法(Win32呼び出し)を示しています。また、これはいくつかの興味があるかもしれませんhttp://www.codeproject.com/Articles/55180/Extending-the-Non-Client-Area-in-Aero – series0ne

答えて

15

あなたのクラスに次のdeclerationsを追加します。

public const int WM_NCLBUTTONDOWN = 0xA1; 
public const int HTCAPTION = 0x2; 

[DllImport("User32.dll")] 
public static extern bool ReleaseCapture(); 

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

があなたのパネルのMouseDownイベントでこれを入れて:http://stackoverflow.com/questions:

private void panel1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     ReleaseCapture(); 
     SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); 
    } 
} 
+0

これは完全に機能します。どうもありがとうございます! – Victor

+0

うれしかったよ:) – Blachshma

+0

優秀! +1は数学的にカーソルの位置、オフセットなどを抽象化しようとするのを避けますが、代わりに建物の中に直接走ってアイスクリームの円錐を取り出し、メッセージングシステムに入れます。ニース!ありがとうございました。 –

関連する問題