2008-11-18 14 views
54

मैं एक टेक्स्टबॉक्स में कुछ टाइप करने के बाद, सी # में WinForm ऐप के साथ काम कर रहा हूं, मैं एंटर कुंजी को हिट करना चाहता हूं लेकिन टेक्स्टबॉक्स में अभी भी फोकस है (कर्सर फ़्लैशिंग अभी भी टेक्स्टबॉक्स में है), मैं इसे कैसे प्राप्त कर सकता हूं?सी # टेक्स्टबॉक्स पर ध्यान केंद्रित करते समय मैं एंटर मारकर बटन पर क्लिक कैसे करूं?

उत्तर

72

सरल विकल्प सिर्फ बटन दबाया करना चाहते हैं (आमतौर पर "ठीक है" आदि) के लिए रूपों की AcceptButton स्थापित करने के लिए किया जाता है:

TextBox tb = new TextBox(); 
    Button btn = new Button { Dock = DockStyle.Bottom }; 
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); }; 
    Application.Run(new Form { AcceptButton = btn, Controls = { tb, btn } }); 

यदि यह एक विकल्प नहीं है, तो आप KeyDown घटना देख सकते हैं आदि, लेकिन वह अधिक काम है ...

TextBox tb = new TextBox(); 
    Button btn = new Button { Dock = DockStyle.Bottom }; 
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); }; 
    tb.KeyDown += (sender,args) => { 
     if (args.KeyCode == Keys.Return) 
     { 
      btn.PerformClick(); 
     } 
    }; 
    Application.Run(new Form { Controls = { tb, btn } }); 
28

यह करने के लिए हमेशा की तरह स्थापित करने के लिए Form के AcceptButton बटन आप चाहते हैं "क्लिक" है। आप इसे या तो वीएस डिजाइनर या कोड में कर सकते हैं और AcceptButton किसी भी समय बदला जा सकता है।

यह आपकी स्थिति पर लागू हो सकता है या नहीं भी हो सकता है, लेकिन मैंने इसे GotFocus के साथ TextBox ईएस के रूप में अलग-अलग व्यवहार को सक्षम करने के लिए उपयोग किया है, जहां उपयोगकर्ता ने एंटर दबाया था। उदाहरण के लिए:

void TextBox1_GotFocus(object sender, EventArgs e) 
{ 
    this.AcceptButton = ProcessTextBox1; 
} 

void TextBox2_GotFocus(object sender, EventArgs e) 
{ 
    this.AcceptButton = ProcessTextBox2; 
} 

एक बात जब इस पद्धति का उपयोग यह है कि आप जब TextBox3 ध्यान केंद्रित हो जाता है ProcessTextBox1 को AcceptButton सेट छोड़ कर मत के सावधान रहने की। मैं ईवेंट TextBox ईएस पर AcceptButton पर सेट करने की सलाह दूंगा, या GotFocus विधि बनाएं जो सभी नियंत्रण जो विशिष्ट AcceptButton कॉल का उपयोग नहीं करते हैं।

+1

+1 सर्वश्रेष्ठ उत्तर मुझे लगता है कि उपयोग कर सकते हैं! – GETah

0

इस पर जाल कर सकते हैं WinForms लिए बहुत-बहुत मान्य है। हालांकि, डब्ल्यूपीएफ में आपको चीजों को अलग-अलग करने की ज़रूरत है, और यह आसान है। IsDefaultकी संपत्ति इस टेक्स्ट-क्षेत्र के लिए प्रासंगिक के रूप में सेट करें।

एक बार जब आप एंटर कुंजी कैप्चर कर लेते हैं, तो तदनुसार गुणों को टॉगल करना न भूलें।

10

मैं अपने आप को एक ही चीज़ की तलाश में इस दौरान आया, और मुझे क्या लगता है कि सूचीबद्ध उत्तरों में से कोई भी वास्तव में समाधान प्रदान नहीं करता है जब आप एंटर दबाते समय फॉर्म पर 'AcceptButton' पर क्लिक नहीं करना चाहते हैं।

एक साधारण उपयोग-केस स्क्रीन पर एक टेक्स्ट सर्च बॉक्स होगा जहां एंटर दबाकर 'खोज' बटन पर क्लिक करना चाहिए, फॉर्म के स्वीकृति बटन व्यवहार को निष्पादित नहीं करना चाहिए।

यह छोटा स्निपेट चाल करेगा;

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 13) 
    { 
     if (!textBox.AcceptsReturn) 
     { 
      button1.PerformClick(); 
     } 
    } 
} 

मेरे मामले में, इस कोड पाठ बॉक्स से प्राप्त एक कस्टम UserControl का हिस्सा है, और नियंत्रण के लिए एक 'ClickThisButtonOnEnter' गुण नहीं है। लेकिन उपर्युक्त एक सामान्य समाधान है।

+1

इसके अतिरिक्त, आप बीप से बचने के लिए 'e.Handled' को 'true' पर सेट कर सकते हैं। – Ruud

+0

वाह, साफ और आसान, मुझे यह पसंद है! – IamBatman

25
private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     button.PerformClick(); 
     // these last two lines will stop the beep sound 
     e.SuppressKeyPress = true; 
     e.Handled = true; 
    } 
} 

इस कुंजीडाउन ईवेंट को टेक्स्टबॉक्स में बांधें, फिर जब भी आप कोई कुंजी दबाते हैं, तो यह ईवेंट निकाल दिया जाएगा।घटना के अंदर हम जाँच करें कि क्या उपयोगकर्ता का बटन दबा दिया "कुंजी डालें", यदि हां, तो क्या आप कार्यवाही नहीं कर सकता

+0

क्या आप कुछ स्पष्टीकरण जोड़ सकते हैं? –

+1

मैं यह जवाब पसंद करता हूं, यह अब तक का सबसे सरल है। – chwi

+2

क्यों न केवल * स्वीकार करें बटन * का उपयोग करें? –

3

अधिकांश शुरुआत अनुकूल समाधान है: 1. अपने डिज़ाइनर में , पाठ क्षेत्र आप ऐसा करना चाहते हैं पर क्लिक करें । गुणों पर विंडो (डिफ़ॉल्ट: नीचे-दाएं) thunderbolt (घटनाक्रम) पर क्लिक करें। यह आइकन वर्णमाला क्रम आइकन और गुण आइकन के बगल में है।

2. कुंजी डाउन पर स्क्रॉल करें। इसके ठीक नीचे ड्रॉपडाउन फ़ील्ड पर क्लिक करें। आप देखेंगे कि वहां कुछ भी नहीं है इसलिए बस एंटर दबाएं।

private void yourNameOfTextbox_KeyDown(object sender, KeyEventArgs e) 
    { 

    } 

3. तो बस कोष्ठक के बीच इस पेस्ट: दृश्य स्टूडियो आप निम्नलिखित कोड लिखेंगे

if (e.KeyCode == Keys.Enter) 
{ 
    yourNameOfButton.PerformClick(); 
} 

इस के रूप में आप यह क्लिक है | में कार्य करेगा।

चीयर्स! फिल

3

बस फॉर्म सेट करें "बटन स्वीकार करें" उस बटन पर संपत्ति जिसे आप एंटर कुंजी द्वारा हिट करना चाहते हैं। या लोड घटना में लिखने this.acceptbutton = btnName;

+0

मेरे लिए सही समाधान। धन्यवाद – Nuno

1
this.textboxName.KeyDown += (sender, args) => { 
       if (args.KeyCode == Keys.Return) 
       { 
        buttonName.PerformClick(); 
       } 
      }; 

इनिशियलाइज़ विधि

1

में जोड़ना या आप सिर्फ इस सरल 2 लाइनर कोड :)

if (e.KeyCode == Keys.Enter) 
      button1.PerformClick(); 
संबंधित मुद्दे