2012-11-20 19 views
6

Bir WinForms projem var. Penceremin üstünde bir panel var. Kullanıcı bu pencereyi tıkladığında ve ardından sürüklediğinde pencereyi hareket ettirmek istiyorum.Bir penceredeki tıklatıp sürükleyerek pencereyi taşıma

Bunu nasıl yapabilirim?

+1

Google bu yinelenen olabilir diyor/30184/winforms-tıklayın-sürükleyin-form-it-hareket-it-olarak-it-in-the-form-in-the-form içinde – rie819

+2

Hayır! O değil. Kullanıcının pencereyi formda herhangi bir yere taşıyabilmesini istemiyorum. Kullanıcının pencereyi sadece panel1'den kontrol edebilmesini istiyorum. – Victor

+2

Google'da "Daniel Moth, Vista Glass" konusuna bakın. Öğreticisinin size bunu yapmanıza izin veren bir yöntem göstereceğini biliyorum (bir Win32 çağrısı). Ayrıca bu bazı ilgi çekici olabilir http://www.codeproject.com/Articles/55180/Extending-the-Non-Client-Area-in-Aero – series0ne

cevap

15

dersinize aşağıdaki açıklamaların altına ekleyin:

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); 

senin panelin MouseDown durumunda bu koyun: 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

bu mükemmel çalışır. çok teşekkür ederim! – Victor

+0

Sevindim yardımcı oldu :) – Blachshma

+0

Mükemmel! +1, matematiksel olarak imleç pozisyonlarını, ofsetlerini vb. Anlamaya çalışan soyutlamalardan kaçınırlar. Ama hayır, bunun yerine, bu mans sadece doğrudan binaya doğru koşar, dondurma konilerini alır ve windows mesajlaşma sistemine geçer. Güzel! Teşekkür ederim. –

İlgili konular