مشكووووور والله ما قصرت زادك الله علماً على علم
بخصوص طلبي الثاني
إقتباس :- كذلك هل يمكن تحديد عدد الأرقام بعد الفاصلة بحيث لا يمكن للمستخدم كتابة أكثر من رقمين بعدها
فهل من سبيل لحله
وشكرا جزيلا على أية حال
أخواني الأفاضل
فيما يتعلق بسؤالي السابق حول إمكانية عدم السماح للمستخدم إضافة أكثر من رقمين بعد الفاصلة العشرية فقد وجدت من خلال البحث الكود التالي
كود :
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If IsNumeric(e.KeyChar) Or e.KeyChar = "." Then
If InStr(TextBox1.Text, ".") > 0 Then
Dim TestText As String = Microsoft.VisualBasic.Right(TextBox1.Text, (Len(TextBox1.Text) - InStr(TextBox1.Text, ".")))
If Len(TestText) = 2 Then
e.Handled = True
End If
End If
End If
End Sub
إلا أن هذا الكود مع أنه لا يسمح بإدخال أكثر من رقمين بعد الفاصلة لكن بعد إدخال هذين الرقمين تتوقف الكتابة في التكست بوكس نهائياً ولايمكن التعديل
على كامل الرقم إلا بمسح ما بعد الفاصلة، مع العلم أني قد رأيت في إحدى المرات امكانية كتابة رقمين فقط بعد الفاصلة مع امكانية تعديل الرقم الذي قبل الفاصلة
أي تتوقف الكتابة فقط عندما يكون مؤشر الكتابة خلف الرقم الثاني بعد الفاصلة
آمل أخواني أني قد أوصلت الفكرة بشكل صحيح وأن ألقى ردودكم الكريمة قريباً
تقبلوا جميعاً تحياتي
.....
منقول
دالة
TextBoxDec وفيها تحديد إدخال عدد منازل الكسر العشري لحد معين لمربع النص
يجب إبطال خاصية اللصق لمربعات النص
TextBox التي مخصصة للأرقام عن طريق تغيير الخاصية
ShortcutsEnabled إلى
False
بالإمكان تجميع أحداث
KeyPress لمربعات النص التي لها نفس المهمة في دالة حدث واحدة بعد كلمة
Handles
كود :
Public Class Form1
'' إبطال خاصية اللصق في مربع النص - يفترض تعيينه من خلال خصائص الأداة وليس برمجياً
'TextBox1.ShortcutsEnabled = False
'TextBox2.ShortcutsEnabled = False
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress ', TextBox2.KeyPress
TextBoxDec(sender, e, 2)
End Sub
' دالة يتم فيها تحديد إدخال عدد منازل الكسر العشري لحد معين لمربع النص - يستحسن وضعها في موديول لتعمل في كامل المشروع
Public Sub TextBoxDec(ByRef sender As Object, ByVal e As KeyPressEventArgs, Optional ByVal dec As Byte = 0)
' إذا كان الرمز المدخل أحد رموز التحكم إقبله واخرج
If Char.IsControl(e.KeyChar) Then
Return
End If
' إذا كان الرمز المدخل ليس من مجموعة الرموز هذه أرفضه واخرج
If InStr(IIf(dec > 0, "1234567890.", "1234567890"), e.KeyChar) = 0 Then
e.Handled = True
Return
End If
' إذا كان رمز الفاصلة العشرية موجود مسبقا أرفض الرمز المدخل حاليا واخرج
If e.KeyChar = "." And sender.Text.Contains(".") Then
e.Handled = True
Return
End If
' عمل نسخة مؤقته من القيمة الموجودة سابقاً
Dim tmpText As String = sender.Text
' إدراج الرمز المدخل حالياً في مكان المؤشر في النسخة المؤقتة
tmpText = tmpText.Insert(sender.SelectionStart, e.KeyChar)
' عندما تحتوي النسخة المؤقتة على الفاصلة العشرية
If tmpText.Contains(".") Then
' إذا كان عدد منازل الكسر العشري أكبر من المطلوب أرفض الرمز المدخل واخرج
If tmpText.Substring(tmpText.IndexOf(".") + 1).Length > dec Then
e.Handled = True
Return
End If
End If
End Sub
End Class
.....
مشكووووووور أخي vbnet هذا هو المطلوب أحسنت وبارك الله لك في علمك ورزقك
أخي مبرمج أوتار شكراً جزيلاً فعلا مميزين فالتميز لا يأتي فقط بالمعرفة وإنما أيضاً بمدى الاهتمام بالآخرين