2010-12-22 18 views
7

मैं किसी पाठ बॉक्स नियंत्रण है कि केवल संख्यात्मक मान स्वीकार बनाना चाहते में संख्यात्मक मान को अनुमति देते हैं।केवल पाठ बॉक्स

मैं इस VB6 में कर सकते हैं?

उत्तर

5

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

Dim textval As String 
Dim numval As String 

Private Sub TextBox1_Change() 
    textval = TextBox1.Text 
    If IsNumeric(textval) Then 
    numval = textval 
    Else 
    TextBox1.Text = CStr(numval) 
    End If 
End Sub 
+0

आप बल्कि मान्य घटना का उपयोग करें। – pinichi

+0

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

8

नियंत्रण बॉक्स> घटक> नियंत्रण -> माइक्रोसॉफ्ट मास्क संपादित नियंत्रण 6.0 पर राइट क्लिक करें।
या सामान्य पाठ बॉक्स के साथ:

Private Sub Text1_Validate(Cancel As Boolean) 
Cancel = Not IsNumeric(Text1.Text) 

End Sub 
3

मैं एपीआई मेरे लिए यह करते हैं। मैं इस फ़ंक्शन को .bas मॉड्यूल में जोड़ता हूं और इसे किसी भी संपादन नियंत्रण के लिए कॉल करता हूं जिसे मुझे केवल संख्यात्मक पर सेट करने की आवश्यकता होती है।

Option Explicit 

Private Const ES_NUMBER = &H2000& 
Private Const GWL_STYLE = (-16) 
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 


'set an editbox to numeric only - return the previous 
'style on success or zero on error 
Public Function ForceNumeric(ByVal EditControlhWnd As Long) As Long 
    Dim lngCurStyle As Long 
    Dim lngReturn As Long 

    lngCurStyle = GetWindowLong(EditControlhWnd, GWL_STYLE) 
    If lngCurStyle <> 0 Then 
     lngReturn = SetWindowLong(EditControlhWnd, GWL_STYLE, lngCurStyle Or ES_NUMBER) 
    End If 

    ForceNumeric = lngReturn 

End Function 

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

Private Sub Form_Load() 
    Dim lngResult As Long 

    lngResult = ForceNumeric(Text1.hwnd) 

End Sub 
+0

हालांकि इसके मुद्दों में यह समस्या है। आप किसी भी गैर-संख्यात्मक पाठ की प्रतिलिपि बना सकते हैं और इसे (1) Ctrl-V, (2) Shift-Insert, और (3) टेक्स्ट बॉक्स 'संदर्भ मेनू के माध्यम से नियंत्रण में पेस्ट कर सकते हैं। केवल (1) कुंजीपटल के माध्यम से वीबी 6 में संबोधित किया जा सकता है। – Herb

+0

@ हर्ब, आप सही हैं, लेकिन वीबी में टेक्स्टबॉक्स में अमान्य मानों को चिपकाने से रोकने का एकमात्र तरीका सिस्टम संदेशों को कैप्चर करना है। यह संभव है, लेकिन वीबी 6 में एक बदसूरत चीज है। यह केवल एक गैर-संख्यात्मक मान में टाइपिंग को रोकता है। अगर मुझे अपनी डेटा अखंडता बीमा करने की ज़रूरत है तो मैं प्रसंस्करण के लिए इसका उपयोग करने से पहले पाठ को वैध मानता हूं। इस बीच मैंने उपयोगकर्ता को अमान्य डेटा दर्ज करने के लिए और अधिक कठिन बना दिया है। .NET में मैं इसे WM_PASTE (मुझे लगता है) के लिए संदेश स्ट्रीम की निगरानी के साथ संयोजित करता है और इसे अनुमति देने से पहले जानकारी को चिपकाया जा सकता है। – jac

0

मैं आम तौर पर इस कोड का उपयोग करें:

Private Sub text1_KeyPress(KeyAscii As Integer) 
    If Not IsNumeric(text1.Text & Chr(KeyAscii)) And Not KeyAscii = 8 Then KeyAscii = 0 
End Sub 
0

निम्नलिखित पूर्णांकों के लिए इस्तेमाल किया जा सकता है:

Private Sub text1_KeyPress(KeyAscii As Integer) 
    If Not IsNumeric(text1.Text & Chr(KeyAscii)) And Not KeyAscii = 8 Then KeyAscii = 0 
    if (KeyAscii>=43) and (KeyAscii<=46) Then KeyAscii = 0 
    'it ignores '-', '+', '.' and ',' 
End Sub 
0

मैं आमतौर पर इस कोड का उपयोग:

Private Sub text1_KeyPress(KeyAscii As Integer) 
    If Not IsNumeric(Chr(KeyAscii)) And Not KeyAscii = 8 Then 
     KeyAscii = 0 
    End If 
End Sub 

आशा इससे मदद मिलती है।

0
If Len(Text2.Text) > 0 Then 
    If IsNumeric(Text2.Text) = False Then 
     Text2.SetFocus 
     CreateObject("WScript.Shell").SendKeys "{BACKSPACE}" 
    End If 
End If 
0

इस कोड का प्रयास करें:

Private Sub Text1_Change() 
    textval = Text1.Text 
    If IsNumeric(textval) Then 
     numval = textval 
    Else 
     Text1.Text = CStr(numval) 
    End If 
End Sub 
संबंधित मुद्दे