PDA

View Full Version : سوال. focus.run time



roya_hh
دوشنبه 05 اسفند 1387, 16:33 عصر
با سلام. اگر در فرمی که runtime ایجاد میشود، تعدادیtextbox داشته باشیم که بخواهیم فقط با ورود اطلاعات focus به textbox بعدی برود باید چگونه عمل کنیم؟


Sub text_lostfocus(ByVal sender As Object, ByVal e As EventArgs)
If sender.text = "" Then
sender.Focus()
Exit Sub
End If
End Sub

من از این کد استفاده کردم اما چون تمامی textbox ها با استفاده از یک تکه کد ایجاد میشوند در صورتیکه اولین textbox مقدار بگیرد این sub اجرا نمیشود.
این هم کد ساختن textbox ها:


Dim txt1 As TextBox
txt1 = New TextBox
a.Controls.Add(txt1)
AddHandler txt1.LostFocus, AddressOf text_lostfocus

anooshiran
دوشنبه 05 اسفند 1387, 21:34 عصر
سلام دوست عزيز

اين code درست عمل مي كند ولي بنظر مي آيد مشكل اين است كه شما event text_lostfocus را فقط براي txt1 فعال كرده ايد و ديگر TextBox هاي شما از اين event برخوردار نيستند.

من چون خودم كلا runTime كار مي كنم يك پيشنهادي برايتان دارم . اگر مثلا شما 10 TextBox يا هر Control ديگري داريد جرا از آنها به صورت آرايه استفاده نمي كنيد . بدين صورت هم در كدنويسي راحت تريد . هم اگر event تعريف كرديد براي تمام كنترل هاي هم نوع فعال خواهد بود.

به مثال زير توجه كنيد





PublicClass Form1
Dim txt() As TextBox
Sub text_lostfocus(ByVal sender AsObject, ByVal e As EventArgs)
If sender.text = ""Then
sender.Focus()
ExitSub
EndIf
EndSub
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
ReDim txt(2)
For i As Int16 = 0 To 2
txt(i) = New TextBox
txt(i).Location = New Point(i * 150, 0)
Me.Controls.Add(txt(i))
AddHandler txt(i).LostFocus, AddressOf text_lostfocus
Next

EndSub
EndClass

roya_hh
چهارشنبه 07 اسفند 1387, 09:29 صبح
در برنامه های بعدی از این روش شما استفاده میکنم.
در حال حاضر مشکل اینه که Sender ، کنترلهای قبلی را هم به این تابع میفرستد و نه فقط کنترلی که فعال است (نشانگر ماوس بر روی آن است)
چکاری باید انجام داد تا فقط کنترل فعال را به این تابع بفرستد؟

roya_hh
چهارشنبه 07 اسفند 1387, 13:53 عصر
چطور می توان کنترل فعال (نشانگر ماوس بر روی آن است) روی یک فرم را مشخص کرد؟

anooshiran
چهارشنبه 07 اسفند 1387, 18:05 عصر
Dim _control = Me.ActiveControl