PDA

View Full Version : حركت با اينتر به جاي tab



manibaharlou
چهارشنبه 03 مهر 1387, 16:49 عصر
سلام
من ميخوام به جاي استفاده از دكمه tab از اينتر براي حركت در textbox ها استفاده كنم اگر امكان داره لطفا منو راهنمايي كنيد.

مهدی رحیم زاده
چهارشنبه 03 مهر 1387, 21:05 عصر
توی Key_Down باید اینو بنویسی :

If (Key.keyCode==Keys.Enter)
بعد داخلش کدهای مربوطه رو بنویسی .
موفق باشید .

h.jaza
چهارشنبه 03 مهر 1387, 21:05 عصر
دوست عزیز قبل از تاپیک زدن، یه سرچی بکنید ببینید مطلبتون مثلش هست یا نه.

این بحث بار ها مطرح شده. کافیه در رویداد KeyPress بگید اگر e.KeyChar برابر با (Enter(\r\n بود، به کنترل بعدی برود.

mary3541
چهارشنبه 03 مهر 1387, 21:13 عصر
برای هر textbox کد زیر را وارد کن
مثلا اگر 2 تا textbox در بر نامه داری برای textbox اولی کد:



privatevoid textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
textBox2.Focus();
}







و برای دومی کد زیر


privatevoid textBox2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
textBox1.Focus();
}




----------
کدی که من نوشتم برا مواقعی خوبه که تعداد textbox ها کم باشه
اگه تعدادشون زیاد باشه کدنویسی برا همشون مشکل و زیاد میشه
کد شماره 5 واقعا کامل هست

RED-C0DE
چهارشنبه 03 مهر 1387, 21:15 عصر
می تونی توی رویداد
KeyDown
مربوط به کنترل TextBox اِت به اینصورت بنویسی:



private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode== Keys.Enter)
SendKeys.Send("{TAB}");
}

hana2064
پنج شنبه 04 مهر 1387, 10:18 صبح
می تونی در رویداد keydown مربوط به فرم اصلی ک

if (e.KeyCode == Keys.Enter)
SendKeys.Send("{TAB}");

بنویسی البته قبلش باید خاصیت keypreview رو true کنی و همه کنترلها رو توسط tab order در منوی view مرتبشون کنی

h.jaza
پنج شنبه 04 مهر 1387, 22:59 عصر
شما باید از یکی از دو کد زیر استفاده بکنید.(یکی Comment شده) ولی ترجیحا از کد اصلی (بدون Comment) استفاده شود چرا که اگر شما تعداد زیادی تکست باکس داشته باشین که بخواهید با اینتر زدن روی هر کدوم به کنترل بعدی برین، خیلی کد نویسیش زیاد و دردسر آفرینه. بهترین کار اینکه این کدو در یکی از تکست باکس ها بنویسید و بعد ...


http://barnamenevis.org/forum/picture.php?albumid=103&pictureid=216


... خیلی ساده رویداد KeyDown باقی تکست باکس رو به این رویداد لینک میدین:


http://barnamenevis.org/forum/picture.php?albumid=103&pictureid=217


اینجوری دیگه نیازی به کد نویسی جداگانه برای هر تکست باکس نیست.

mohammad272005
پنج شنبه 04 مهر 1387, 23:36 عصر
این کد رو تو Form_Load بنویس:


Action<Control> checkControl = null;
checkControl = delegate(Control control)
{
if (control is TextBox)
(control as TextBox).KeyDown += delegate(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
SendKeys.Send("{TAB}");
};
else
foreach (Control subControl in control.Controls)
checkControl(subControl);
};
checkControl(this);

StepUp360
جمعه 09 دی 1390, 12:37 عصر
سلام من از کدی که دوست عزیزمون آقای mohammad272005 (http://barnamenevis.org/member.php?43326-mohammad272005) گفته بودن استفاده کردم اما توی این قسمت error میده:

(control as TextBox).KeyDown += delegate(object sender, KeyEventArgs e)

که Error! این هستش:

Error 1 A local variable named 'e' cannot be declared in this scope because it would give a different meaning to 'e', which is already used in a 'parent or current' scope to denote something else

لطفا راهنمایی بفرمایید که ایراد کار من کجاست؟ و چطور رفعش کنم، ممنون.

akarsu
جمعه 09 دی 1390, 13:36 عصر
این تو کدهای فرمت بنداز (خارج از form_load)
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg == 256 && keyData == System.Windows.Forms.Keys.Enter)
{
// Execute an alternative action: here we tabulate in order to focus on the next control in the formular
if (this.ActiveControl.ToString().Contains("GlassButt on"))
// GlassButton.UserControl1
return base.ProcessCmdKey(ref msg, keyData);
else
{
System.Windows.Forms.SendKeys.Send("{TAB}");

// return true to stop any further interpretation of this key action
return true;
}

}
return base.ProcessCmdKey(ref msg, keyData);
}