2009-02-04 21 views
12

मैंने यहां कहीं और पढ़ा है कि टेक्स्ट बॉक्स में "एंटर" कुंजी स्ट्रोक कैप्चर करने के लिए और इसे एक बटन दबाकर उपयोग करने के लिए मुझे फॉर्म की कीप्रेव्यूव प्रॉपर्टी को सही पर सेट करना चाहिए और कीडाउन के मान की जांच करनी चाहिए।कैसे निर्धारित करें कि फ़ॉर्म पर किस नियंत्रण पर ध्यान केंद्रित किया गया है?

मैं इस कार्यक्षमता का उपयोग कई टेक्स्टबॉक्स नियंत्रणों पर करने में सक्षम होना चाहता हूं जो प्रत्येक एक अलग बटन से जुड़े होते हैं।

मेरा सवाल यह है कि मुझे कैसे पता चलेगा कि कौन सा नियंत्रण कुंजीपटल घटना का कारण बनता है? प्रेषक को फॉर्म के रूप में सूचीबद्ध किया गया है।

जी

उत्तर

5

मुझे एक समाधान मिला है जो काम करता प्रतीत होता है।

private void DeviceForm_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyValue == 13 && tstxtDeviceFilter.Focused) 
     { 
      filterByDeviceSN(); 
     } 
    } 

मैं मदद नहीं कर सकता लेकिन लगता है कि वहां एक बेहतर तरीका होना चाहिए!

--EDIT - संपादित करें - संपादित करें - संपादित करें - EDIT--

ठीक है, नीचे दिए गए सुझावों देखने के बाद (धन्यवाद) मैं इस में मेरे लिए एक 'बेहतर' तरीका मिल गया है परिस्थिति।

this.tstxtDeviceFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tstxtDeviceFilter_KeyDown); 

    private void tstxtDeviceFilter_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyValue == 13) 
     { 
      filterByDeviceSN(); 
     } 
    } 

जाहिर पाठ बॉक्स खुद के बजाय प्रपत्र मैं फोकस बारे में चिंता करने की जरूरत नहीं है पर घटना को फँसाने द्वारा। एक बार फिर मैं उस बारे में सोचने के लिए गूंगा महसूस नहीं करता!

4

प्रत्येक प्रपत्र में "स्वीकार करें" बटन & "रद्द करें" बटन के लिए एक संपत्ति है, ये बटन हैं जो "क्लिक" होते हैं जब उपयोगकर्ता क्रमशः प्रवेश करते हैं और भागते हैं।

आप के रूप में प्रत्येक नियंत्रण फोकस हो जाता है डिफ़ॉल्ट बटन को बदल सकते हैं (आप एक मिल प्रति बटन फोकस घटना हाथ के बल्लेबाज हो सकता है, और पाठ बॉक्स का एक सेट के साथ साझा)

आप इस फिर से उपस्थिति करते हैं बटन उपयोगकर्ता को एक दृश्य क्यू देने के लिए बदलते हैं जो बताते हैं कि कौन सा बटन डिफ़ॉल्ट है।

वैकल्पिक रूप से, यदि आप ऐसा नहीं करना चाहते हैं, तो आप "ActiveControl" प्रॉपर्टी का उपयोग कर सकते हैं, और यह देखने के लिए परीक्षण कर सकते हैं कि टेक्स्ट बॉक्स के कौन से सेट हैं।

क्या आपने खुद से पूछा है, डिफ़ॉल्ट बटन क्या होना चाहिए यदि यह थ्रेस टेक्स्ट बॉक्स में से एक नहीं है?

+0

धन्यवाद बीडब्ल्यू, यह जानना उपयोगी जानकारी है। मुझे लगता है कि मैं इस मामले में अपने उत्तर के साथ जाऊंगा क्योंकि मुझे केवल एक टेक्स्टबॉक्स में "एंटर" कुंजी प्रेस में दिलचस्पी है और केवल तभी जब फोकस हो। धन्यवाद! –

+0

जी-की टिप्पणी ने मुझे गले लगाया जहां मैं गलत हो रहा था, अधिक जानकारी के लिए धन्यवाद। मेरा ऐप ज्यादातर एक ही संवाद है, इसलिए इसमें एक बटन भी नहीं है और जब आप बाहर निकलते हैं तो उसे बंद नहीं करते हैं। –

3

क्या आपने Form.ActiveControl को आजमाया है?

+2

मैंने इसे देखा था, लेकिन जहां मैं "this.ActiveControl.Name" फोकस के साथ नियंत्रण का नाम ढूंढने की अपेक्षा करता हूं, एक खाली स्ट्रिंग थी। मैं शायद कुछ स्पष्ट रूप से गलत कर रहा हूँ हालांकि! –

0

आप इस कोड का उपयोग फॉर्म की मुख्य घटनाओं को कैप्चर करने के लिए प्रारंभिक बिंदु के रूप में कर सकते हैं। ActiveControl वह है जिस पर फोकस है। इस उदाहरण में, जब आप फॉर्म पर अलग-अलग टेक्स्टबॉक्स में हों तो "एंटर" पर अन्य क्रियाएं जोड़ने के लिए यह लचीला है। यह वीबी.नेट है, लेकिन आप आसानी से सी # में परिवर्तित करने में सक्षम होना चाहिए।

Private Sub MyForm_KeyDown(ByVal sender As Object, _ 
    ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 

    If e.KeyCode = Keys.Enter Then 
     If Me.ActiveControl.Name = Me.TextBox1.Name Then 
      ' This is the TextBox we want to be active to run filterByDeviceSN() 
      filterByDeviceSN() 
     ElseIf Me.ActiveControl.Name = Me.TextBox2.Name Then 
      foo() 
     End If 
    End If 
End Sub 
+0

ActiveControl।नाम एक खाली स्ट्रिंग देता है। ActiveControl.Text उसी स्ट्रिंग को लौटकर अपेक्षित व्यवहार करता है जैसा कि वर्तमान में टेक्स्टबॉक्स में है। "this.ActiveControl.Equals (tstxtDeviceFilter)" झूठी वापसी करता है। सोचो कि मैं अभी अपने उत्तर के साथ जाऊंगा। जब तक कोई भी नाम कैसे प्राप्त नहीं करता है? –

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

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