2010-12-13 18 views
6

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

private void button1_MouseDown(object sender, MouseEventArgs e) 
{ 
    foreach (Control t in this.Controls) 
    { 
     if (t is TextBox) 
     { 
      if (t.Focused) 
      { 
       MessageBox.Show(t.Name); 
      } 
     } 
    } 
} 
+1

बटन टैब प्रेस के माध्यम से भी ध्यान केंद्रित कर सकता है। – 26071986

उत्तर

15

पिछले केंद्रित नियंत्रण का ट्रैक रखने के लिए कोई संपत्ति या कार्यक्षमता में कोई निर्मित नहीं है। जैसा कि आपने बताया है, जब भी बटन क्लिक किया जाता है, तो यह ध्यान केंद्रित करेगा। यदि आप उस टेक्स्टबॉक्स का ट्रैक रखना चाहते हैं जो इससे पहले केंद्रित था, तो आपको इसे स्वयं करना होगा। इस बारे में जा रहा होगा अपने फार्म का है कि वर्तमान में ध्यान केंद्रित पाठ बॉक्स नियंत्रण के लिए एक संदर्भ रखती है करने के लिए एक वर्ग के स्तर के चर जोड़ने के लिए की

एक ही रास्ता:

private Control _focusedControl; 

और फिर से प्रत्येक के लिए GotFocus घटना में अपने

private void TextBox_GotFocus(object sender, EventArgs e) 
{ 
    _focusedControl = (Control)sender; 
} 

जब भी एक बटन क्लिक किए जाने के रूप में butto के बजाय अपने प्रश्न में दिखाया गया है अब, (तुम क्यों MouseDown घटना का उपयोग कर रहे हैं: पाठ बॉक्स नियंत्रण, तो आप उस पाठ बॉक्स के साथ _focusedControl चर का अद्यतन होगा ? N के Click घटना), तो आपको उस वर्ग स्तर के चर में सहेजा गया है पहले से केंद्रित पाठ बॉक्स नियंत्रण के संदर्भ में उपयोग कर सकते हैं जैसे आप चाहें:

private void button1_Click(object sender, EventArgs e) 
{ 
    if (_focusedControl != null) 
    { 
     //Change the color of the previously-focused textbox 
     _focusedControl.BackColor = Color.Red; 
    } 
} 
3

आप शायद, अपने बक्सें की GotFocus घटना की सदस्यता सकता है पाठ बॉक्स की दुकान एक क्षेत्र में (आप इस पैरामीटर के साथ मिलेगा), और इस क्षेत्र का उपयोग करके अपने बटन दबाएँ?

2

मैं button1_MouseHover घटना का प्रयोग करेंगे। जब यह ईवेंट ट्रिगर होता है, ActiveControl पिछले नियंत्रण की ओर इशारा करते हुए है, जिसे आप _focusedControl के रूप में स्टोर कर सकते हैं।

बेशक, यदि उपयोगकर्ता बटन पर टैब करता है तो यह काम नहीं करेगा।

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