PDA

View Full Version : انتقال Focus با زدن کلید Enter



davoudi
سه شنبه 02 اسفند 1384, 15:14 عصر
من تعدادی Textbox دارم و میخواهم با هر بار زدن کلید Enter به Textbox بعدی متنقل شوم (بجای زدن کلید Tab) لطفآ در این مورد به من کمک کنید.
متشکرم.

Hamedm
سه شنبه 02 اسفند 1384, 20:14 عصر
سلام

عزیز جان لطفا قبل از زدن تاپیک، یک جستجو بکنید.
قبلا برای این کار سورسی قرار داده شده است.

در پناه حق موفق باشید و پرتوان

ali_kolahdoozan
چهارشنبه 03 اسفند 1384, 11:53 صبح
if(e.keycode==keys.enter){senkeys.send("{tab}")}
این به روش بتدائی است توی keydown همه تستهات باید بزاری . راحهای پیشرفته مثل کامپوننت نویسی و استفاده از کلاسها هم هست

davoudi
چهارشنبه 03 اسفند 1384, 12:38 عصر
با تشکر از توجه آقا حامد و کمک آقای کلاهدوزان.
الان امتحانش می کنم.
متشکرم.

vb341
چهارشنبه 03 اسفند 1384, 13:58 عصر
تو رویداد keypress بنویس :
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar = Chr(13) Then
TextBox2.Focus()
e.Handled = True
End If
End Sub

ali_kolahdoozan
چهارشنبه 03 اسفند 1384, 18:27 عصر
کد آفای vb341 رو قبول ندارم . اینطوری باید بونیم کنترل بعدی چی هست .

vb341
چهارشنبه 03 اسفند 1384, 21:43 عصر
باید بدونی کنترل بعدی چی هست که کد رو برا اون بنویسی یا نه ؟ روش بهتری میدونین بگین تا ما هم استفاده کنیم !!!

HO457
چهارشنبه 03 اسفند 1384, 22:01 عصر
if(e.keycode==keys.enter){senkeys.send("{tab}")}

این کد بهترین روش هستش
از این کد هم میتنونی استفاده کنی ولی راه منطقیش همون کد بالایی هستش.:


If e.KeyChar = Chr(13) Then
Dim x As Integer = textboxname.TabIndex
Dim n As New TextBox
For Each n In Me.Controls
If n.TabIndex = x + 1 Then
n.Focus()
e.Handled = True
End If
Next
End If

کد رو داخل ایونت keypress‌ بنویس جای textboxname هم نام جعبه متنی که کد داخل ایونتش نوشته شده رو بنویس
موفق باشی

HO457
چهارشنبه 03 اسفند 1384, 22:09 عصر
یه کار دیگه هم میتونی بکنی یه کلاس ایجاد کد داخلش این کد رو بنویس:


Public Sub chgfcs(ByVal textboxname As TextBox, ByVal formname As Form, ByVal indx As Integer)
Dim ctrl As New TextBox
For Each ctrl In formname.Controls
If ctrl.TabIndex = indx + 1 Then
ctrl.Focus()
End If
Next
End Sub

بعد داخل ایونت keypress جعبه متن این رو بنویس مثلا واسه textbox1:


If e.KeyChar = Chr(13) Then
Dim cls As New Class1
cls.chgfcs(TextBox1, Me, TextBox1.TabIndex)
End If

Hamedm
چهارشنبه 03 اسفند 1384, 22:51 عصر
if(e.keycode==keys.enter){senkeys.send("{tab}")}
این به روش بتدائی است توی keydown همه تستهات باید بزاری . راحهای پیشرفته مثل کامپوننت نویسی و استفاده از کلاسها هم هست

سلام

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

در پناه حق موفق باشید و پرتوان

vbapr2005
پنج شنبه 04 اسفند 1384, 00:16 صبح
همونطور که آقای کلاهدوزان گفتن (یه کمی دقیق تر و کاملتر می نویسم) :

Private Sub TextBoxes_KeyDown(...) Handles TB1.KeyDown, TB2.KeyDown, TB3.KeyDown, ...
If e.KeyCode = Keys.Enter Then SendKeys.Send("{Tab}")
End Sub
(من بعد از (...)TextBoxes_KeyDown برای شلوغ نشدن از سه تا نقطه استفاده کردم، در آخر همون خط هم تو باید هر چی تکست باکس داری بنویسی (مثل بالا))
توجه کن که بعد از اینتر زدن در آخرین تکست بکس فوکاس به کنترل بعدی منتقل میشه (که احتمالا یه دکمه هستش)

این بهترین راه، کلی ترین راه و (استثنائا) کوتاهترین راه هستش.

راهی به غیر از این چرخوندن لقمه دور سره.
امیدوارم مشکلت حل شه (گرچه من هیچ چیز جدیدی نسبت به راهنمایی های قبلی نگفتم)

hadi2345
پنج شنبه 04 اسفند 1384, 12:05 عصر
با سلام .
با هندل کردن کلیه تکست باکسهای درون یک پانل یا گروپ باکس و استفاده از کدی که دوستان گذاشتن ، به راحتی این کار رو میتونی انجام بدی . استفاده از AddHandler توی فرمهایی که خیلی شلوغه و تعداد تکست باکس ها زیاده ، ضروریه ....
موفق باشید .

oskarimbns
سه شنبه 29 مرداد 1387, 07:06 صبح
با سلام من كه هر كاري كردم هيچكدام از اين كدها جواب نداد اگه ممكنه بيشتر توضيح بدين

mostafaaa
سه شنبه 29 مرداد 1387, 09:30 صبح
این کد رو توی رویداد KeyDown تکست باکس بزار.

If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
My.Computer.Keyboard.SendKeys("{TAB}")
End If