2009-03-04 15 views
8

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

मुझे कुछ घटनाओं और क्या नहीं स्थापित करके हाल ही में यह करना याद है, लेकिन मुझे याद नहीं है कि कैसे।

उत्तर

4

TextChanged घटना

आप MSDN लाइब्रेरी से सभी घटनाएँ पा सकते हैं, यहाँ TextBox class reference है:

http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox(VS.80).aspx

+0

टेक्स्ट चेंजेड ईवेंट केवल नियंत्रण से खो गया है (जैसे टैब आउट से)। यह छोड़ने के बाद ही अमान्य डेटा को प्रवेश करने से रोका जाएगा। ओपी इसे कभी भी अनुमति अवधि से रोकने के लिए प्रतीत होता है। – TheTXI

+8

यह सटीक नहीं है, फोकस की परवाह किए बिना TextChanged आग। –

+0

मैं – TheTXI

1

आपको कीप्रेस या कीडाउन घटनाओं पर जांच करनी चाहिए न कि केवल आपके टेक्स्ट चेंज किए गए ईवेंट पर।

यहाँ एक सी # उदाहरण MSDN documentation से प्रत्यक्ष है: भविष्य में

// Boolean flag used to determine when a character other than a number is entered. 
private bool nonNumberEntered = false; 

// Handle the KeyDown event to determine the type of character entered into the control. 
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    // Initialize the flag to false. 
    nonNumberEntered = false; 

    // Determine whether the keystroke is a number from the top of the keyboard. 
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) 
    { 
     // Determine whether the keystroke is a number from the keypad. 
     if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) 
     { 
      // Determine whether the keystroke is a backspace. 
      if(e.KeyCode != Keys.Back) 
      { 
       // A non-numerical keystroke was pressed. 
       // Set the flag to true and evaluate in KeyPress event. 
       nonNumberEntered = true; 
      } 
     } 
    } 
    //If shift key was pressed, it's not a number. 
    if (Control.ModifierKeys == Keys.Shift) { 
     nonNumberEntered = true; 
    } 
} 

// This event occurs after the KeyDown event and can be used to prevent 
// characters from entering the control. 
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    // Check for the flag being set in the KeyDown event. 
    if (nonNumberEntered == true) 
    { 
     // Stop the character from being entered into the control since it is non-numerical. 
     e.Handled = true; 
    } 
} 
+0

मैं आप के रूप में अच्छी TextValueChanged जाँच shoud लगता है, किसी को बस "चिपकाएँ" के रूप में कर सकता है अवैध वर्ण :) –

+1

इस विधि का पेस्ट के साथ काम नहीं करेगा (यह CTRL-V को अवरुद्ध कर देगा, लेकिन यह जांच नहीं करेगा टेक्स्टबॉक्स प्रासंगिक मेनू "पेस्ट")। आपको इसे अलग से संभालना होगा। – xanatos

1

यदि आपका डेटा समाप्त नहीं हुआ है तो आपका डेटा मान्य कैसे होगा? यानी कोई उपयोगकर्ता एक संख्या टाइप करता है और आप इसे एक तिथि के रूप में आजमाते और मान्य करते हैं?

+0

को सही मानता हूं मेरा अनुमान यह एक संख्यात्मक क्षेत्र है जिसमें अक्षरों, या इसके विपरीत – Jason

+1

शामिल नहीं हो सकता है यदि आप लोगों को अमान्य वर्णों को इनपुट करने से रोकना चाहते हैं तो यह काफी आम है। यदि आप कीप्रेस या कीडाउन पर जांचते हैं, तो आप इनपुट को जाल कर सकते हैं और इसे हमेशा प्रदर्शित होने से रोक सकते हैं। – TheTXI

+1

पूरे बिंदु को बताता है। जब डेटा समाप्त नहीं होता है तो डेटा मान्य नहीं होता है, इसलिए जब भी फ़ील्ड में अमान्य डेटा होता है तो हम त्रुटि प्रकट करना चाहते हैं। इसमें स्टार्टअप पर और जब तक डेटा अमान्य है तब तक टाइपिंग शामिल है। – Sakkle

5

यदि आप डेटाबेस का उपयोग कर रहे हैं, तो टेक्स्टबॉक्स की गुणों पर जाएं। शीर्ष पर खोलें (डेटा बाइंडिंग), (उन्नत) संपत्ति पर क्लिक करें, तीन बिंदु दिखाई देंगे (...) उन पर क्लिक करें। उन्नत डेटा बाध्यकारी स्क्रीन प्रकट होता है। टेक्स्टबॉक्स की प्रत्येक प्रॉपर्टी के लिए जो आपके बाध्य है, Text में, आप डेटाबेस सेट करते समय सेट कर सकते हैं, और इस प्रकार सत्यापन को कंबोबॉक्स Data Source Update mode का उपयोग करके "किक इन" करना चाहिए। यदि आप इसे OnPropertyChanged पर सेट करते हैं, तो आप टाइप करते समय फिर से मूल्यांकन करेंगे (डिफ़ॉल्ट OnValidation है जो केवल आपके टैब के रूप में अपडेट होता है)।

+0

सबसे तेज़, आसान और साफ-सुथरा समाधान – Florian

1

बाध्यकारी स्रोत पर अपने टेक्स्टबॉक्स को बाध्य करते समय उन्नत पर जाएं और सत्यापन प्रकार
"संपत्ति पर बदला गया" चुनें। यह आपके कुंजी को प्रत्येक कुंजी प्रेस पर आपकी इकाई को प्रसारित करेगा। Here is the screen shot

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