पर सभी नियंत्रणों के लिए एक क्लिक को संभालना मेरे पास .NET UserControl (FFX 3.5) है। इस नियंत्रण में कई बाल नियंत्रण होते हैं - एक पैनल, एक जोड़े, लेबल, कुछ टेक्स्टबॉक्स, और फिर भी एक और कस्टम नियंत्रण। मैं आधार नियंत्रण पर कहीं भी दायाँ क्लिक को संभालना चाहता हूं - इसलिए किसी भी बच्चे के नियंत्रण (या पैनल के मामले में बच्चे के बच्चे) पर राइट क्लिक करें। मैं ऐसा करना चाहता हूं ताकि उदाहरण के लिए नए नियंत्रणों के लिए हैंडलरों में तार न किए बिना नियंत्रण में बदलाव हो।प्रपत्र
सबसे पहले मैंने WndProc को ओवरराइड करने का प्रयास किया, लेकिन जैसा कि मुझे संदेह था, मुझे केवल फॉर्म पर क्लिक के लिए संदेश मिलते हैं, न कि उसके किसी भी बच्चे।
foreach (Control c in this.Controls)
{
c.MouseClick += new MouseEventHandler(
delegate(object sender, MouseEventArgs e)
{
// handle the click here
});
}
यह अब नियंत्रण है कि घटना का समर्थन है, लेकिन लेबल के लिए क्लिक मिलते हैं, उदाहरण के लिए, अभी भी कुछ नहीं मिलता है: एक अर्द्ध हैक रूप में, मैं InitializeComponent के बाद निम्नलिखित गयी। क्या ऐसा करने का कोई आसान तरीका है जिसे मैं देख रहा हूं?
void initControlsRecursive(ControlCollection coll)
{
foreach (Control c in coll)
{
c.MouseClick += (sender, e) => {/* handle the click here */});
initControlsRecursive(c.Controls);
}
}
/* ... */
initControlsRecursive(Form.Controls);
तो इतना स्पष्ट है कि मैं पेड़ों के लिए जंगल नहीं देख पा रहा था। धन्यवाद। – ctacke