PDA

View Full Version : حرکت بین Textbox از طریق کلید Enter



rezaiy.ali
پنج شنبه 01 شهریور 1386, 09:47 صبح
با سلام
من تو برنامه ام 5 تا 6 تکس باکس دارم که می خواهم هنگامی که اولین تاکس باکس را اطلاعات وارد کردم با زدن کلید Enter به تکس باکس بعدی انتقال پیدا کنم
حالا من چطور می تونم این کار را انجام دهم؟
با تشکر

VisualStudio
پنج شنبه 01 شهریور 1386, 09:59 صبح
چگونه می توان میان کنترلهای یک فرم بخصوص TextBox های آن حرکت کرد؟ (البته با زدن کلید Enter)
دو راه حل وجود دارد:
1- در رویداد KeyDown هر کنترل دستورات زیر را بنویسید:

If e.KeyCode = Keys.Enter Then
نام کنترل بعدی.Focus()
End If

اما این کار یک عیب بزرگ دارد وآنکه برای هرکنترل باید این کار را انجام دهید که برای فرمهایی که کنترل زیاد دارند وقت گیر و خسته کننده است.

2- ابتدا خاصیت KeyPreview فرم را به True تغییر دهید سپس در رویداد KeyDown فرم دستورات زیر را بنویسید:


If e.KeyCode = Keys.Enter Then
Dim Con As Control
Con = Me.GetNextControl(Me.ActiveControl, True)
Con.Focus()
End If

توضیح :
دستور Me.ActiveControl نام کنترلی که Focus را در اختیار دارد برمی گرداند ودستورMe.GetNextControl نام کنترل بعدی را که Focus را در اختیار می گیرد برمی گرداند ودر Con قرار می دهد و دستورCon.Focus باعث می شود تا Focus در اختیار کنترل قرار گیرد.

نکته : فراموش نکنید برای صحیح کارکردن دستورات بالا باید خاصیت TabIndex هرکنترل به درستی تنظیم شده باشد.

rezaiy.ali
پنج شنبه 01 شهریور 1386, 10:29 صبح
با تشکر از دوست عزیزم
اما یه نکته: زمانی که فوکوس روی آخرین کنترل هست بازدن دوباره کلید Enter خطا روخ میده
چی کار کنم که این مشکل را رفع نمایم
باتشکر مجدد

Farshad_sh
پنج شنبه 01 شهریور 1386, 10:31 صبح
سلام. یه راه ساده تر اینه که شما از Tab Index های کنترل هات مطمئن باشی که پشت سر هم هستند بعد با 1 خط کد زیر این کار رو Handle کنی :

If e.KeyCode = Keys.Enter Then
Sendkeys.send("{TAB}")
End If
به همین راحتی

rezaiy.ali
پنج شنبه 01 شهریور 1386, 11:35 صبح
با تشکر از شما دوست عزیزم آقای Farshad_sh
آقا فرشاد میشه در مورد کدی که نوشتی قسمت

Sendkeys.send("{TAB}")
توضیح کاملی بدی(دقیقا این قسمت چه عملی را انجام میده)که باعث حرکت بین تکس باکس ها میشه؟
با تشکر

VisualStudio
پنج شنبه 01 شهریور 1386, 12:00 عصر
شما اگر از کد دوم استفاده کنی و TabIndex ها را تنظیم کنم همین طوری می چرخه و به کنترل اولی باز می گرده

hsadeh
پنج شنبه 01 شهریور 1386, 12:40 عصر
درسته - من هم از کد دوم آقای VisualStudio استفاده کردم . آلی بود .
دست شما درد نکند آقای VisualStudio

Farshad_sh
پنج شنبه 01 شهریور 1386, 18:42 عصر
با تشکر از شما دوست عزیزم آقای Farshad_sh
آقا فرشاد میشه در مورد کدی که نوشتی قسمت

Sendkeys.send("{TAB}")
توضیح کاملی بدی(دقیقا این قسمت چه عملی را انجام میده)که باعث حرکت بین تکس باکس ها میشه؟
با تشکر


سلام. ببینید خیلی سادس. تابع SendKeys با متد Send به فرم شما یک رویداد فشار کلید رو ارسال میکنه. یعنی شما با استفاده از این تابع میتونید به فرم تون یا Application تون با فشرده شدن یک کلید، کد یک کلید خاص دیگه رو بفرستید. مثلا شما در این مثال کلید Enter را فشار می دهید اما کدی که به برنامه ارسال میشه کد کلید TAB هستش که عمل TAB رو هم انجام میده. همون کاری که دقیقا کلید TAB میکنه. کلیه کلید ها و حتی کلید های ترکیبی رو میشه با این رویه فرستاد.

خود من از این کد برای حرکت بین TextBox ها استفاده میکنم. اما یه مزیت بزرگ داره و اونم اینکه اگه توی یک Grid بخوایم بین سلول ها حرکت کنیم با این رویه خیلی راحت میشه اما دقیق اطلاعی ندارم که با کد آقای VisualStudio هم میشه یا نه. البته همونطور که میدونید حرکت روی سلول های Grid از چب به راسته اما توی فارسی ما ار راست به چپ حرکت میکنیم پس باید فوکوس را به کنترل قبلی بدیم نه به کنترل بعدی که با این رویه ای که براتون گذاشتم راحت این عمل انجام میشه کافیه که به جای TAB کلید ترکیبی SHIFT + TAB رو ارسال کنیم. اما مطمئن نیستم که باز کد آقا VisualStudio این کارو انجام میده یا خیر. حتما این مورد رو تست میکنم

با تشکر