आप अपने यूसी में ध्यान से रखे पैनल नियंत्रण का उपयोग करके और निम्न स्तर के विंडोज संदेशों की निगरानी करके माउस की स्थिति का उपयोग करके अपने उपयोगकर्ता नियंत्रण के चारों ओर एक सीमा की उपस्थिति का अनुकरण कर सकते हैं।
उपयोगकर्ता नियंत्रण डिजाइन सतह पर एक पैनल जोड़ें और पैनल को आकार दें ताकि यूसी की डिजाइन सतह का केवल एक छोटा सा हिस्सा दिखाई दे (दिखाई दें * नीचे देखें)। डिजाइन सतह का दृश्य भाग आपकी रंगीन सीमा होने जा रहा है, इसलिए तदनुसार इसकी 'मोटाई' सेट करें। पैनल में अपने यूसी लिखने वाले अन्य नियंत्रण जोड़ें।
आपका नियंत्रण इस प्रकार दिखाई देंगे:
अपने यूसी में IMessageFilter इंटरफेस को लागू करें। PreFilterMessage() के कार्यान्वयन में आप यूसी के सापेक्ष माउस की स्थिति की जांच करेंगे और यूसी के बैककोलर को अपने सीमा रंग में सेट करेंगे जब माउस यूसी पर हो, या जब यह डिफ़ॉल्ट रंग पर वापस न हो। चूंकि पैनल का बैककोलर नहीं बदलता है, यह आपके यूसी आह की तरह उपयोगकर्ता को दिखाई देगा।
यहाँ आप ऐसा करने के लिए की आवश्यकता होगी कोड की न्यूनतम राशि है:
public partial class UserControl1 : UserControl, IMessageFilter
{
public UserControl1() {
InitializeComponent();
Application.AddMessageFilter(this);
}
public bool PreFilterMessage(ref Message m) {
if (!this.IsDisposed && this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition))) {
this.BackColor = Color.Green; // Or whatever border color you want.
} else {
this.BackColor = SystemColors.Control; // Back to the UC's default border color.
}
return false;
}
}
नोट: जब मैं इस परीक्षण किया मैं कठिनाई पारदर्शी नहीं होने के लिए की स्थापना मेरी पैनल के BackColor हो रही थी। मैंने डिजाइनर में अस्थायी रूप से बैककॉलर को एक अलग रंग में बदलकर और फिर इसे अपने डिफ़ॉल्ट रंग (नियंत्रण) में बदलकर तय किया।
स्रोत
2011-05-05 16:19:22
धन्यवाद! यही वह है जिसकी तलाश में मैं हूं। – Gerard
मैंने देखा है कि यदि एक फॉर्म के ऊपर एक मोडल फॉर्म खोला गया है तो प्रीफिल्टर मैसेज अभी भी नीचे दिए गए फॉर्म पर निष्पादित है ... क्या इसे पकड़ने का कोई तरीका है? – Gerard
आपको 'एप्लिकेशन' करने की आवश्यकता नहीं है। RemoveMessageFilter (यह); '? यह अनिवार्य है। आप इसे 'UserControl' में कैसे रखेंगे? – Odys