मुझे कोई लेने वाला नहीं मिला और अंत में यह पता चला।
उत्तर QueryContinueDrag ईवेंट की निगरानी करना है। ड्रैग ड्रॉप ऑपरेशन के दौरान यह घटना लगातार आग लगती है। QueryContinueDragEventArgs में enum DragAction टाइप एक्शन प्रॉपर्टी होती है, जो या तो DragAction.Cancel, DragAction.Drop या DragAction.Continue है। यह आपको मानक व्यवहार बदलने की अनुमति देने के लिए एक पठन/लेखन संपत्ति है (हमें इसकी आवश्यकता नहीं है)।
यह उदाहरण कोड मानता है ड्रैगड्रॉप प्रोग्रेस ध्वज ड्रैग ड्रॉप की शुरुआत में सेट होता है और ड्रैग ड्रॉप सफलतापूर्वक पूरा होने पर रीसेट हो जाता है। यह ड्रैगड्रॉप समाप्त होता है क्योंकि उपयोगकर्ता ने ड्रैग ड्रॉप लक्ष्य (ड्रैग ड्रॉप लक्ष्य MyControl1 और MyControl2) के बिना माउस को छोड़ दिया है या ड्रैग ड्रॉप को रद्द कर दिया है। यदि आपको ड्रैगड्रॉप ईवेंट प्रोग्राम्स की आग लगने से पहले ड्रैगड्रॉपइन प्रोग्रेसफ्लैग रीसेट कर दिया गया है तो आप परवाह नहीं है, तो आप हिट टेस्ट के साथ बांट सकते हैं और ध्वज को रीसेट कर सकते हैं।
Private Sub MyControl_QueryContinueDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.QueryContinueDragEventArgs) Handles MyControl.QueryContinueDrag
Dim MousePointerLocation As Point = MousePosition
If e.Action = DragAction.Cancel Then '' User pressed the Escape button
DragDropInProgressFlag = False
End If
If e.Action = DragAction.Drop Then
If Not HitTest(new {MyControl1, MyControl2}, MousePointerLocation) Then
DragDropInProgressFlag = False
End If
End If
End Sub
Private Function HitTest(ByVal ctls() As Control, ByVal p As Point) As Boolean
HitTest = False
For Each ctl In ctls
Dim ClientPoint As Point = ctl.PointToClient(p)
HitTest = HitTest Or (ClientPoint.X >= 0 AndAlso ClientPoint.Y >= 0 AndAlso ClientPoint.X <= ctl.Width AndAlso ClientPoint.Y <= ctl.Height)
If HitTest Then Exit For
Next
End Function
इस उदाहरण hitTest में एक rountine माउस स्थिति नियंत्रण आयतों में से किसी में है अगर यह सच है कि सरणी गुजर के माध्यम से एक माउस स्थिति (स्क्रीन समन्वय) और नियंत्रण की एक सरणी लेता है और sifts है।
स्रोत
2009-01-26 19:21:24
आप बहुत अच्छे हैं! विशिष्ट नियंत्रणों पर हिट टेस्ट के लिए मुझे एक अच्छा कार्यान्वयन के साथ वास्तव में क्या चाहिए। चतुर। – AMissico
अगर clt.ClientRectangle.Contains (ClientPoint) तो: HitTest = True: इसके लिए बाहर निकलें: अंत यदि – AMissico
: लाइन ब्रेक दिखाने के लिए जोड़ा गया है (भले ही कथन दिखाया गया हो)। – AMissico