السلام عليكم...
للأسف VB6 لا تدعم مشاركة نفس الإجراء لأكثر من كائن واحد. لكن يمكن تجاوز ذلك باستعمال الـ Class Modules كالتالي:
1. أضف إلى المشروع Class Module و قم بتسميتها باسم CNumberOnlyTextBox (من خلال الخاصية Name).
2. ضع بها الكود التالي:
كود :
Option Explicit
Private WithEvents m_TextBox As TextBox
Public Sub AttachTextBox(ATextBox As TextBox)
Set m_TextBox = ATextBox
End Sub
Private Sub m_TextBox_KeyPress(KeyAscii As Integer)
If KeyAscii > 31 Then
If Chr$(KeyAscii) = "." Then
If InStr(m_TextBox.Text, ".") <> 0 Then
If m_TextBox.SelLength > 0 Then
If InStr(m_TextBox.SelText, ".") = 0 Then
KeyAscii = 0
End If
Else
KeyAscii = 0
End If
End If
ElseIf InStr("0123456789", Chr$(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
End Sub
3. أضف إلى المشروع Class Module أخرى و قم بتسميتها باسم CNumberOnlyTextBoxes (من خلال الخاصية Name).
4. ضع بها الكود التالي:
كود :
Option Explicit
Private TextBoxCollection As Collection
Private Sub Class_Initialize()
Set TextBoxCollection = New Collection
End Sub
Private Sub Class_Terminate()
Dim Idx As Long
For Idx = TextBoxCollection.Count To 1 Step -1
TextBoxCollection.Remove Idx
Next Idx
Set TextBoxCollection = Nothing
End Sub
Public Sub Add(ATextBox As TextBox)
Dim ANewTextBox As New CNumberOnlyTextBox
ANewTextBox.AttachTextBox ATextBox
TextBoxCollection.Add ANewTextBox
End Sub
* تقول لماذا كل ذلك؟ - تذكر أنك تكتب الأكواد السابقة مرة واحدة فقط.
* الآن لأي Form بها مربعات نص تريدها أن تقبل أرقاماً فقط (بالإضافة إلى الفاصلة العشرية) نقوم بالتالي:
أ. في قسم التصريحات العام:
كود :
Private NumTextBoxes As New CNumberOnlyTextBoxes
ب. و في إجراء الحدث Load للـ Form نضيف مربعات النص المطلوبة:
كود :
Private Sub Form_Load()
NumTextBoxes.Add Text1
NumTextBoxes.Add Text3
End Sub
و إذا أردت أن تضيف مربعات نص أخرى (كي تقبل أرقاماً) فيكفي أن تضيف لكل منها سطراً واحداً في الحدث Form_Load.
نرجو الاستفادة و السلام.