WinForms में टेक्स्टबॉक्स से फोकस कैसे हटाएं?


110

मुझे कई टेक्स्टबॉक्स से ध्यान हटाने की आवश्यकता है। मैंने प्रयोग करने की कोशिश की:

textBox1.Focused = false;

इसका ReadOnlyगुण मान है true

मैंने फ़ार्म पर फ़ोकस सेट करने की कोशिश की, ताकि सभी टेक्स्टबॉक्स से इसे हटा दें, लेकिन यह भी काम करने में विफल रहता है:

this.Focus();

और falseजब टेक्स्टबॉक्स का चयन किया जाता है तो फ़ंक्शन वापस आ जाता है।

तो, मैं टेक्स्टबॉक्स से फोकस कैसे हटाऊं?

जवाबों:


113

फोकस को स्थानांतरित करने के लिए आपको कुछ अन्य फ़ोकस करने योग्य नियंत्रण की आवश्यकता होती है।

ध्यान दें कि आप फ़ोकस को एक लेबल पर सेट कर सकते हैं। आप इस पर विचार कर सकते हैं कि आप [टैब] कुंजी को कहाँ ले जाना चाहते हैं।

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


धन्यवाद; मैंने सिर्फ एक लेबल पर ध्यान केंद्रित करने की कोशिश की और अब टेक्स्टबॉक्स अनफोकस्ड हो गया है। ऐसा लगता है कि आप किसी कारण से एक फॉर्म पर ध्यान केंद्रित नहीं कर सकते।
कैलम रोजर्स

7
कंटेनर नियंत्रण (प्रपत्र, पैनल) फोकस को उनके पहले बच्चे के नियंत्रण पर पारित करेगा।
हेनक होल्टरमैन

शानदार सुझाव। इससे मेरी समस्या हल हो गई। मैं कीपर को फॉर्म के खिलाफ इस्तेमाल कर रहा हूं और कई बटन आदि हैं। समस्या यह है कि ऐप एक कार्डरीडर से इनपुट ले रहा है, इसलिए यदि फोकस फॉर्म से ही दूर हो जाता है, तो सभी नरक ढीले हो जाते हैं। बटन पर क्लिक करने के बाद एक लेबल पर ध्यान केंद्रित करने से मेरी समस्या हल हो गई। बहुत बहुत धन्यवाद!
joelc

62

लेबल पर ध्यान केंद्रित करना मेरे लिए label1.Focus()सही काम नहीं कर रहा था ? टेक्स्टबॉक्स अभी भी फ़ोकस करते समय फ़ोकस करता है, हालांकि वेलोसराप्टर्स उत्तर देने की कोशिश कर रहा है , मेरे लिए काम किया, इस तरह से लेबल पर फ़ॉर्म के सक्रिय नियंत्रण को सेट करना:

private void Form1_Load(object sender, EventArgs e)  
{ 
    this.ActiveControl = label1;       
}

7
काश मैं तुम्हें लाख तीर दे सकता। मैंने हर किसी की कोशिश की कि लोगों ने सुझाव दिया, यह केवल एक ही है जो काम करता है। किसी कारण से, पाठ बॉक्स हमेशा सब कुछ से ध्यान चुरा लिया ...
eladyanai

3
यह कंटेनर की तरह कंटेनर नियंत्रण के लिए भी काम करता है। मैं बस पूरी तरह से ध्यान हटाना चाहता था और इसने काम किया:this.ActiveControl = panelOnMyForm;
टिम श्मेल्टर 9'13

52

आप निम्नलिखित कोड जोड़ सकते हैं:

this.ActiveControl = null;  //this = form

7
मेरा मानना ​​है कि यह सबसे अच्छा जवाब है। यदि आप MSDN को पढ़ते हैं, तो "फोकस" जैसी कई अन्य विधियाँ नियंत्रण डिजाइनरों के लिए निम्न स्तर के तरीकों के रूप में सूचीबद्ध हैं। यदि आप चाहते हैं कि बाकी सब कुछ "चयनित नहीं" हो, तो यह सबसे आसान तरीका प्रतीत होता है, ठीक है, यह सिर्फ एक छोटी सी रेखा है।
रोस्तोव

1
यह आधा कारण हो सकता है कि Microsoft ने इस संपत्ति को पहले स्थान पर जोड़ा हो।
पैंजरक्रिसिस

यह सबसे सुरुचिपूर्ण समाधान की तरह लगता है, इसने मेरे मामले में सही काम किया।
नेटवेव

मैं वास्तव में काम करने के लिए यह उत्तर चाहता हूं क्योंकि यह ऐसा लगता है जैसे यह होना चाहिए, लेकिन मेरे मामले में यह काम नहीं करता था क्योंकि जब तक यह छुट्टी की घटना को ट्रिगर नहीं करता था तब तक यह मान्य / मान्य घटनाओं को ट्रिगर नहीं करता था।
राइस जोन्स

32

टेक्स्ट बॉक्स को अक्षम और सक्षम करने का प्रयास करें।


5
यह बहुत चालाक काम करता है क्योंकि यह स्वचालित रूप से इस बीच टैब सूची में अगले नियंत्रण का चयन करता है।
निक

3
मैं MVVM का उपयोग करके सिल्वरलाइट में विकसित कर रहा हूं और इसे टेक्स्टबॉक्स को लक्षित करने वाले व्यवहार का उपयोग करके कार्यान्वित किया गया है। चूँकि मेरे पास अक्षम / सक्षम समाधान पर काम करने वाले अजूबों पर ध्यान केंद्रित करने के लिए एक और UIElement काम नहीं था। धन्यवाद!
अल्बर्ट ओल्डफील्ड

मैं इसे कैसे निष्क्रिय कर सकता हूं?
मिगुएलम्पन

1
@miguelmpn textBox1.Enabled = false;आपके टेक्स्टबॉक्स को अक्षम कर देगा। और इसे trueफिर से सक्षम करने के लिए इसे सेट करना।
रक्तिम बिस्वास

24

आप पसंद activecontrolकरने के लिए फ़ॉर्म प्रॉपर्टी भी सेट कर सकते nullहैं

ActiveControl = null;

7
मुझे उम्मीद है कि लोग इस पर सभी तरह से स्क्रॉल करेंगे और उत्तर के रूप में चिह्नित वर्कअराउंड का उपयोग नहीं करेंगे
makoshichi

अभी भी इस दिन का सबसे अच्छा जवाब, यहाँ दोस्त, मेरे अपवोट ले लो।
xoxel

8

Focusइनपुट फ़ोकस सेट करता है, इसलिए इसे फ़ॉर्म पर सेट करना कारगर नहीं होगा क्योंकि फ़ार्म इनपुट स्वीकार नहीं करते हैं। प्रपत्र की ActiveControlसंपत्ति को एक अलग नियंत्रण में सेट करने का प्रयास करें । आप Selectकिसी विशिष्ट नियंत्रण SelectNextControlका चयन करने के लिए या टैब क्रम में अगले नियंत्रण का चयन करने के लिए भी उपयोग कर सकते हैं ।


1
यहां और सब कुछ करने की कोशिश की और Select()मेरे लिए काम किया।
डेरेक डब्ल्यू

8

इसको आजमाओ:

पहले टैब ऑर्डर सेट करें।

फिर फॉर्म लोड इवेंट में हम एक टैब कुंजी प्रेस को प्रोग्रामेटिक रूप से आवेदन करने के लिए भेज सकते हैं। तो वह एप्लिकेशन टैब क्रम में 1 कंटोल को फोकस देगा।

फॉर्म लोड में भी इस लाइन को लिखें।

SendKeys.Send("{TAB}");

इसने मेरे लिए काम किया।


4

इस पोस्ट ने मुझे ऐसा करने के लिए प्रेरित किया:

ActiveControl = null;

यह मुझे अन्य नियंत्रणों के बिना शीर्ष स्तर पर सभी कीबोर्ड इनपुट पर कब्जा करने की अनुमति देता है।


3

मुझे एक अच्छा विकल्प मिल गया है! यह मेरे लिए सबसे अच्छा काम करता है, बिना किसी और चीज़ पर ध्यान दिए।

उसकी कोशिश करो:

private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{    
    e.SuppressKeyPress = true;
}

3

मैंने इसे अपने कस्टम कंट्रोल पर बनाया, मैंने यह ऑनफोकस () किया

this.Parent.Focus();

इसलिए यदि टेक्सबॉक्स केंद्रित है - यह तुरंत टेक्स्टबॉक्स पैरेंट (फॉर्म, या पैनल ...) पर केंद्रित है, तो यह अच्छा विकल्प है यदि आप इसे कस्टम नियंत्रण पर बनाना चाहते हैं।


2

ऐसा लगता है कि मुझे किसी अन्य तत्वों पर ध्यान केंद्रित करने की आवश्यकता नहीं है। विंडोज फोन 7 एप्लिकेशन पर, मैं फोकस टेक्स्ट बॉक्स के फोकस को अनसेट करने के लिए फोकस विधि का उपयोग कर रहा हूं।

निम्नलिखित कमांड देने से फोकस कुछ नहीं होगा:

void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        Focus();
    }
}

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

यह मेरे लिए काम करता है, लेकिन मुझे नहीं पता कि यह आपके लिए काम क्यों नहीं करता है: /


2

एक सरल उपाय यह होगा कि आप फोकस को मारें, बस अपनी कक्षा बनाएँ:

public class ViewOnlyTextBox : System.Windows.Forms.TextBox {
    // constants for the message sending
    const int WM_SETFOCUS = 0x0007;
    const int WM_KILLFOCUS = 0x0008;

    protected override void WndProc(ref Message m) {
        if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;

        base.WndProc (ref m);
    }
}

बिल्कुल उसी तरह का समाधान जिसकी मुझे तलाश थी। धन्यवाद!
लेफ्टीकोडर

1
    //using System;
    //using System.Collections.Generic;
    //using System.Linq;

    private void Form1_Load(object sender, EventArgs e)
    {
        FocusOnOtherControl(Controls.Cast<Control>(), button1);
    }

    private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control
    {
        foreach (var control in controls)
        {
            if (control.GetType().Equals(typeof(TextBox)))
            {
                control.TabStop = false;
                control.LostFocus += new EventHandler((object sender, EventArgs e) =>
                {                     
                    focusOnMe.Focus();
                });
            }
        }
    }

0

जिस तरह से मैं इसके चारों ओर पहुंचता हूं वह मेरे सभी winform नियंत्रणों को रखता है। मैं टैब लेबल 0 के रूप में सभी लेबल और नॉन-सलेक्टिंग विनफॉर्म कंट्रोल करता हूं, फिर टैब क्रम 2 के रूप में मेरा पहला नियंत्रण और फिर 1, 3, 4, 5 आदि द्वारा प्रत्येक चयन करने योग्य नियंत्रण के क्रम में वृद्धि ...

इस तरह, जब मेरा Winforms शुरू होता है, पहले TextBox पर ध्यान केंद्रित नहीं होता है!


0

आप इसे दो विधि से कर सकते हैं

  • बस वांछित टेक्स्टबॉक्स के "TabStop" गुणों को गलत बनाने के लिए अब यह ध्यान केंद्रित नहीं करेगा, भले ही आपके पास एक पाठ फ़ील्ड हो
  • दो टेक्स्ट बॉक्स को खींचें

    1. एक दिखाई दे जिस पर आप फेकस नहीं चाहते हैं जो टेक्स्टबॉक्स 1 है
    2. 2 को अदृश्य बनाएं और उस टेक्स्ट फ़ील्ड के गुणों पर जाएँ और चुनें

टैक्स्टेक्स 2 के 0 का टैबइंडेक्स मान

  1. और अपने टेक्स्टबॉक्स 1 से 1 के टैबइंडेक्स का चयन करें अब यह टेक्स्टबॉक्स 1 पर ध्यान केंद्रित नहीं करेगा

0

यदि आप चाहते हैं कि ऑप्टिकल प्रभाव यह हो कि टेक्स्टबॉक्स में उसकी सामग्री पर कोई नीला चयन न हो, तो बस कोई पाठ न चुनें:

textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();

इसके बाद, सामग्री को जोड़ते समय .Text += "...", कोई नीला चयन नहीं दिखाया जाएगा।


0

सेट करने का प्रयास करें TabStopकरने के लिएFalse अपने दृश्य नियंत्रण के लिए जिस पर ध्यान केंद्रित नहीं किया गया है।

उदाहरण के लिए:

txtEmpID.TabStop = false;

-1

पाठ बॉक्स लिखने के फॉर्म या UserControl के निर्माण में

SetStyle(ControlStyles.Selectable, false);

इनिशियलाइज़कम्पोनेंट () के बाद; स्रोत: https://stackoverflow.com/a/4811938/5750078

उदाहरण:

public partial class Main : UserControl
{

    public Main()
    {
        InitializeComponent();
        SetStyle(ControlStyles.Selectable, false);
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.