19-06-13, 11:28 PM
Aly El-Haddad كتب :السلام عليكم،
عندي ملاحظة على كودك و هي: أنك تستخدم الحدث Click للـTextBox و هذا الحدث ليس الوحيد الذي يحدد الـTextBox حيث يمكن تحديده مثلاً من زر TAB أو من كود في مكان آخر مثل TextBox.Focus
لذا فقمت بالتعديل على الكود ليكن كالتالي:
كود :
Public Class Form1
Private txt1 As Boolean = False
Private txt2 As Boolean = False
Private Sub TextBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
txt2 = False
txt1 = True
End Sub
Private Sub TextBox2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Enter
txt1 = False
txt2 = True
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If txt1 Then
TextBox1.Text = "1"
txt1 = False
End If
If txt2 Then
TextBox2.Text = "1"
txt2 = False
End If
End Sub
End Class
لاحظت الآن قصوراً في كودي و هو عند تحديد TextBox ثم الضغط على أداة أخرى على الـForm لتأدية وظيفة ما ثم الضغط على Button1 يكتب الـ"1" في الـTextBox كما لو أنه كان محدد
لذا فقد عالجت هذا القصور بجعل الكود كالتالي

كود :
Public Class Form1
Private txt1 As Boolean = False
Private txt2 As Boolean = False
Private hLastCtrl As New IntPtr
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For Each C As Control In Me.Controls
AddHandler C.Leave, AddressOf SetLastFocusedControl
Next
End Sub
Private Sub SetLastFocusedControl(ByVal sender As System.Object, ByVal e As System.EventArgs)
hLastCtrl = sender.Handle
End Sub
Private Sub TextBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter
txt2 = False
txt1 = True
End Sub
Private Sub TextBox2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.Enter
txt1 = False
txt2 = True
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If (hLastCtrl = TextBox1.Handle) AndAlso txt1 Then
TextBox1.Text = "1"
txt1 = False
End If
If (hLastCtrl = TextBox2.Handle) AndAlso txt2 Then
TextBox2.Text = "1"
txt2 = False
End If
End Sub
End Class
