2012-12-17 15 views
8

में दो नियंत्रण ओवरलैपिंग की जांच कैसे करें, मैंने एक कक्षा बनाई है जो उपयोगकर्ता को फ़ॉर्म पर पैनल खींचने की अनुमति देता है। मैं कैसे सुनिश्चित कर सकता हूं कि उपयोगकर्ता एक दूसरे के शीर्ष पर दो पैनल नहीं रखता है? यदि वे करते हैं, तो मैं ओवरलैप होने पर नियंत्रण में से किसी एक को स्थानांतरित/या हाइलाइट करना चाहता हूं।विंडोज फॉर्म

मैंने इसे ऑनमोउसडाउन ईवेंट में सेट करने का प्रयास किया लेकिन यह काफी काम नहीं करता था।

इसके अलावा, फ़ॉर्म पर पैनलों की संख्या को चित्रों की संख्या के आधार पर अलग-अलग चित्रों की संख्या के आधार पर भिन्नता है। प्रत्येक पैनल में पैनल के अंदर एक पिक्चरबॉक्स होता है।

+0

यदि आप नए पैनल के ड्रॉप स्थान को पहले से मौजूद कर चुके हैं तो आप सभी मौजूदा पैनलों को जांचने का प्रयास कर सकते हैं। आपको बस स्थान और नियंत्रण के आकार के साथ कुछ गणित करना होगा। – sgud

उत्तर

1

तो मैं इस सवाल को सगुद के सुझाव की सहायता से हल करने में सक्षम था।

चाल का उपयोग आयताकार घटना के अंदर आयताकार विधि का उपयोग करना था।

यहां अंतर्ज्ञान है जिसका मैंने उपयोग किया था। (यह सबसे साफ समाधान नहीं हो सकता है)

1) मेरे मुख्य पैनल के अंदर सभी नियंत्रणों की एक सूची बनाएं।

2) नियंत्रण के माध्यम से ट्रैवर्स और प्रत्येक नियंत्रण के लिए सभी आयताकार बाउंड की एक सूची बनाएं। आप इसे नियंत्रण से प्राप्त कर सकते हैं।

3) बाउंड्स की सूची के माध्यम से जाएं और वर्तमान में सक्रिय तत्व की बाध्यता के साथ इसे छेड़छाड़ करें।
यदि लौटा आयताकार ऊंचाई और चौड़ाई सक्रिय नियंत्रण के समान होता है तो बैक कलर प्रॉपर्टी को असाइन करें।

मुझे आशा है कि यह किसी और कि एक समान समस्या

7

एक बहुत बेहतर दृष्टिकोण Rectangle.Bounds.IntersectsWith विधि है, जो आप के लिए जांच करता है उपयोग करने के लिए और क्लीनर कोड का उत्पादन कर सकते है है करने के लिए मदद करता है। मैं व्यक्तिगत रूप से किसी भी प्रदर्शन के मुद्दों या लाभों, एक तरफ या दूसरे से अनजान हूं, हालांकि मैं अनुमान लगाता हूं कि बस आपके नियंत्रणों पर लूपिंग करना और उन्हें जांचना सूचियों और लूप दोनों की तुलना में तेज़ होगा।

Picturebox pic = new Picturebox(); 
foreach(Control picturebox in Form1){ 
    if (pic.Bounds.IntersectsWith(picturebox.Bounds)) 
    { 
     //We have a problem, Houston, because we just collided! 
    } 
} 

मुझे आशा है कि इससे मदद मिलेगी, भले ही आपने कुछ समय पहले इस प्रश्न से पूछा था।

+0

मैंने इस फ़ंक्शन को देखा और ऐसा लगता है कि यह काम करेगा। हालांकि, मैं अब इस परियोजना पर काम नहीं करता हूं, इसलिए इसका परीक्षण करने में सक्षम नहीं होगा। हालांकि धन्यवाद। –

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