2012-11-20 9 views
6

मेरे पास WinForms प्रोजेक्ट है। मेरे पास मेरी खिड़की के शीर्ष पर एक पैनल है। मैं चाहता हूं कि वह पैनल विंडो को स्थानांतरित करने में सक्षम हो, जब उपयोगकर्ता उस पर क्लिक करता है और फिर ड्रैग करता है।नियंत्रण पर क्लिक-ड्रैग द्वारा विंडो को स्थानांतरित करना

मैं यह कैसे कर सकता हूं?

+1

Google इस एक नकली हो सकता है कहते हैं/30184/Winforms-click-drag-कहीं-में-फॉर्म-टू-मूव-इन-द-क्लिक-इन-द-फॉर्म – rie819

+2

नहीं! यह नहीं। मैं नहीं चाहता कि उपयोगकर्ता विंडो में कहीं भी खिड़की को स्थानांतरित कर सके। मैं चाहता हूं कि उपयोगकर्ता विंडो में 'पैनल 1' नियंत्रण – Victor

+2

से विंडो को स्थानांतरित करने में सक्षम हो, Google में "डैनियल मॉथ, विस्टा ग्लास" देखें। मुझे पता है कि उसका ट्यूटोरियल आपको एक विधि दिखाता है जो आपको ऐसा करने की अनुमति देगा (इसकी एक 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 कर्सर की स्थिति, ऑफ़सेट, और इतने पर गणितीय रूप से समझने की कोशिश कर रहे अवशेषों से बचाता है .. लेकिन नहीं, इसके बजाय यह मनुष्य सिर्फ इमारत में सीधे चलाता है, आइसक्रीम शंकु प्राप्त करता है और विंडोज मैसेजिंग सिस्टम में टैप करता है। अच्छा! धन्यवाद। –

संबंधित मुद्दे