यह समाधान क्योंकि जब आप लगातार लिखते हैं, तो 1 लाइन लाइनों आप स्क्रीन पर देखते का कोई ध्यान दिए बिना माना जाएगा काम नहीं करता।
इसे हल करने के लिए, आपको स्क्रीन पर दिखाई देने वाली रेखाओं की संख्या को गिनने के लिए SendMessage API का उपयोग करने की आवश्यकता है। कोड यहाँ है।
Private Declare Function SendMessageINT Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Const EM_GETLINECOUNT = &HBA
Private Sub txtText1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtText1.KeyPress
Const MAX_LINES = 13
Dim lngCount As Long
lngCount = SendMessageINT(txtText1.Handle, EM_GETLINECOUNT, 0, 0)
If lngCount = MAX_LINES And Asc(e.KeyChar) <> Keys.Back And Asc(e.KeyChar) <> Keys.Delete Then
e.Handled = True
End If
End Sub
इसके साथ ही, आप पाठ बॉक्स में कर्सर की स्थिति पता लगाने के लिए, ताकि आप उपयोगकर्ता टाइप करने के लिए अनुमति दे सकते हैं की जरूरत है। पिछले कोड में, एक बार यह 13 लाइनों तक पहुंचने के बाद, उपयोगकर्ता किसी भी पंक्ति में टाइप नहीं कर पाएगा। उस पर काबू पाने के लिए, आपको पता लगाना होगा कि कर्सर किस रेखा में है। इसके लिए नीचे दिए गए कोड का प्रयोग करें।
एपीआई घोषणा
निजी कॉन्स्ट EM_LINEFROMCHAR = & HC9
कोड नीचे पाठ बॉक्स के MouseDown, MouseUp, KeyDown और KeyUp घटनाओं में रखा जाना चाहिए के साथ इस घोषणा करते हैं।
intLineNo = SendMessageINT (txtText1।हैंडल, EM_LINEFROMCHAR, -1,) + 1
लाइननो खोजने के बाद, आप टेक्स्टबॉक्स की कीप्रेस ईवेंट में मूल्यांकन कर सकते हैं।
स्रोत
2012-04-05 08:49:12
+1 अच्छा प्रश्न –
रमेश, मैं अपने जवाब देने के लिए एक नया समाधान जो अधिक लाइनों को जोड़ने जब अधिकतम लाइनों को पार कर रहे हैं से उन रोका जा सके जोड़ लिया है। मौजूदा टेक्स्ट बॉक्स मान को संपादित या छोटा करने की आवश्यकता नहीं है। आपको जिस चीज का उपयोग करने की ज़रूरत है वह वह है। –
@ रश्मी, लेकिन यह बहुत सारे परिदृश्य को संभाल नहीं करता है। कॉपी पेस्ट की तरह, टेक्स्ट रैपिंग आदि .. –