PDA

View Full Version : کنترلها و کلید Enter



Future
یک شنبه 20 خرداد 1386, 01:16 صبح
سلام دوستان، من در یکی از فرمهام حدود 10 تا textbox دارم . حالا می خوام با فعال شدن فرم کرسر بر روی اولین textbox قرار بگیره و با زدن کلید Enter به textbox بعدی بروم.
با تشکر

choobin84
یک شنبه 20 خرداد 1386, 06:18 صبح
در فرم لود بنیویسید:
textBox1.Select();
l

و برای اینتر:
if(ex.KeyCode==Keys.Enter)
SelectNextControl((Control)sender,false,true,true, true);
l

مهدی رحیم زاده
یک شنبه 20 خرداد 1386, 06:20 صبح
برای مورد اول باید تو قسمت Form1_Activated این کدو بنویسی :

textBox1.Focus();
و برای اینکه بتونی با کلید enter بری به textbox دوم باید تو قسمت Key_Down مربوط به textbox اول این کدو بنویسی :

if (e.KeyCode == Keys.Enter)
textBox2.Focus();
و برای باقی textbox ها هم همینطور ...

MH2538
یک شنبه 20 خرداد 1386, 08:37 صبح
سلام
با این روش که من نمونه اون رو براتون اینجا گذاشتم ، دیگه نیازی نیست برای تک تک textboxها دستور بنویسی .
ضمن این که این روش محدودیتی توی تعداد نداره و با چند خط کد می تونی کل کنترل هات رو مدیریت کنی.

حامد مصافی
یک شنبه 20 خرداد 1386, 13:17 عصر
پاسخ در پست دوم داده شده. نمی دونم بقیه پست ها چرا نوشته شده اند؟؟!!

sabaab1359
دوشنبه 28 خرداد 1386, 16:46 عصر
در پست دوم دو نکته هست.
اول اینکه منظور از اینتر که نوشته شده رویداد اینتر فرم است؟
دوم اینکه ex چی هست؟
من به جای ex از keys استفاده کردم ولی کد بعد از if رو اجرا نمی کنه و پیغام unreachable می ده

choobin84
دوشنبه 28 خرداد 1386, 17:31 عصر
در پست دوم دو نکته هست.
اول اینکه منظور از اینتر که نوشته شده رویداد اینتر فرم است؟
دوم اینکه ex چی هست؟
من به جای ex از keys استفاده کردم ولی کد بعد از if رو اجرا نمی کنه و پیغام unreachable می ده
ببخشید شاید چیزی که اون الا نوشتم، کمی گنگه.

هنگامی که می خواهیم با زدن دکمه اینتر از کنترلی که کرسر الان درون اونه ، به کنترلی که tabindex بعدی را داراست، از کدی که نوشتم استفاده میکنیم.(برای تعیین ترتیب tab هر کنترل از طریق view =>> taborder و کلیلک ماوس عمل می کنیم.)
باز هم عذر خواهی میکنم اشتباهی کوچک در کد نویسی در تایپیک مربوط رخ داده.
اون ex نیست بلکه آرگومان e هست مربوط به تابع رویداد keyDown‌ مربوط به کنترل است.

در زیر یه نمونه برنامه گذاشتم که چندتا تکست باکس داره، با زدن اینتر روی هر کدام از تکست باکس ها تکست باکس بعدی و نهایتا دکمه آخری فعال و select ‌می شه.
یه تابع به نام textBoxs_KeyDown اینکار رو میکنه.
می تونید یه تابع برای همه تکست باکس ها بنویسید. برای اینکار وقتی می خواهید برای تکست باکس مربوطه رویداد keydown رو بنویسید ، از پنجره رویداد که در کنار پنجره properties هست ، استفاده کرده و اون تابع رو براش قرار بدید.

choobin84
دوشنبه 28 خرداد 1386, 17:43 عصر
سلام
با این روش که من نمونه اون رو براتون اینجا گذاشتم ، دیگه نیازی نیست برای تک تک textboxها دستور بنویسی .
ضمن این که این روش محدودیتی توی تعداد نداره و با چند خط کد می تونی کل کنترل هات رو مدیریت کنی.
چرا اینقدر سختش کردید؟

MH2538
سه شنبه 29 خرداد 1386, 05:49 صبح
choobin84 عزیز
شاید روشی که من ارسال کرده باشم در نگاه اول سخت به نظر برسه اما با این روش نه تنها textbox ها بلکه هر کجکوعه ای کنترل ها رو می شه ، کنترل کرد.
ضمن اینکه در مورد روش شما، حالتی رو فرض کنید که کنترل بعدی textbox نباشه ، یا در حالت کلی textbox ها بصورت متوالی و پشت سر هم نباشند ؛ اون وقت روش شما نیاز به یک سری تغییر خواهد داشت.

choobin84
سه شنبه 29 خرداد 1386, 06:21 صبح
choobin84 عزیز
حالتی رو فرض کنید که کنترل بعدی textbox نباشه ، یا در حالت کلی textbox ها بصورت متوالی و پشت سر هم نباشند ؛ اون وقت روش شما نیاز به یک سری تغییر خواهد داشت.

تفاوتی در کنترل بعدی نمی کنه، هر چیز دیگری هم که باشه می تونه همون تابع رو صدا یزنه.
بله اگر ترتیب های کنترل ها در فرم تغییر کنند ، کد هم باید تغییر کند.
میشه شما لطف کنید و برنامه تان را برای ویژوال استودیو 2003 آپلود کنید. من برنامه تان را با nodepad باز کردم و دیدم.
-----------------------------------------------------------------------------

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

kiani.mehdi
سه شنبه 29 خرداد 1386, 06:43 صبح
این روش را امتحان کردین ؟




SendKeys.Send("{Tab}");




فرق این روش با بقیه روش ها اینه که درواقع عمل کلید Tab را کلید enter انجام میده
پس کلید Tab هر عملی را که بتونه انجام بده احتمالا با دستور فوق کلید enter هم میتونه اونو انجام بده

البته توی تمامی روش هایی که گفته شد منجمله روش خودم یه اشکالی وجود داره که در صورت استفاده ار خود Tab اون اشکال دیگه نیست
اونم اینه که هنگام استفاده از روش های فوق وقتی که کلید enter زده میشه صدای بیپ از کامپیوتر شنیده میشه
ولی با خود tab چنین صدایی نداره
بهش توجه کردین؟ یا اینکه فقط مال من اینطوره ؟ راه حلش چیه ؟
موفق باشید
مهدی کیانی

choobin84
سه شنبه 29 خرداد 1386, 07:06 صبح
این روش را امتحان کردین ؟




SendKeys.Send("{Tab}");

فرق این روش با بقیه روش ها اینه که درواقع عمل کلید Tab را کلید enter انجام میده
پس کلید Tab هر عملی را که بتونه انجام بده احتمالا با دستور فوق کلید enter هم میتونه اونو انجام بده

البته توی تمامی روش هایی که گفته شد منجمله روش خودم یه اشکالی وجود داره که در صورت استفاده ار خود Tab اون اشکال دیگه نیست
اونم اینه که هنگام استفاده از روش های فوق وقتی که کلید enter زده میشه صدای بیپ از کامپیوتر شنیده میشه
ولی با خود tab چنین صدایی نداره
بهش توجه کردین؟ یا اینکه فقط مال من اینطوره ؟ راه حلش چیه ؟
موفق باشید
مهدی کیانی
مال من هم صدا میده.علتش رو نمی دونم
در ضمن این sendkey هم خیلی باحاله.

kiani.mehdi
سه شنبه 29 خرداد 1386, 07:23 صبح
به نظر من اگه نشه این صدا را بر طرف کرد اصلا به درد نمی خوره و بهتره که از همون فشذ استفاده بشه

تصور کنین که مکاربری داره ب برنامه شما کار میکنه یکی از فرم هاتون داراای مثلا 15 تا تکست باکس هست
حالا اگه بخواد با enter بین این تکست باکس ها سوئیچ کنه و هر بار اون صدا را بشنوه و مثلا داره به موسیقی هم در حین اجرای برنامه گوش میده میدونین چه اتفاقی میافته ؟

البته حتما میشه رفعش کرد
من خیلی براش وقت نذاشتم

ghafoori
سه شنبه 29 خرداد 1386, 09:58 صبح
از کامپیوتر من که صدا بیرون نمی اید برنامه هایی را که نوشتم و از این روش هم استفاده کردم داخل کامپیوترهای دیگر هم صدا نداده تا انجا که من می دانم
ایا کسی دیگری هم به این مشکل خورده

iman_s52
سه شنبه 29 خرداد 1386, 11:32 صبح
واسه از بین بردن صدای بوق می تونی از این کد استفاده کنی:

e.KeyCode=0;

sinpin
سه شنبه 29 خرداد 1386, 12:49 عصر
واسه از بین بردن صدای بوق می تونی از این کد استفاده کنی:

e.KeyCode=0;

اگه یه دونه از دکمه‌های روی فرم بصورت default button استفاده بشه صدای بیپ حذف میشه.

kiani.mehdi
سه شنبه 29 خرداد 1386, 13:25 عصر
اگه یه دونه از دکمه‌های روی فرم بصورت default button استفاده بشه صدای بیپ حذف میشه.

منظورتون از drfault button چیه ؟
اگه منظورتون خاصیت accept button مربوط به فرم هست که باید عرض کنم که اگه این خاصیت تنظیم بشه اصلا همه جی منتفی میشه و tab با enter دیگه معنا نمیده

امتحان کنید میفهمید دلیلش را

اگه منظورتون چیز دیگه ای هست بیشتر توضیح بدین




واسه از بین بردن صدای بوق می تونی از این کد استفاده کنی:

e.KeyCode=0;



key code از خواص read only و غیر قابل تغییر هستش
لطفا کد های تست شده بذارین

kiani.mehdi
سه شنبه 29 خرداد 1386, 17:10 عصر
واسه از بین بردن صدای بوق می تونی از این کد استفاده کنی:

e.KeyCode=0;

key code از خواص read only و غیر قابل تغییر هستش
لطفا کد های تست شده بذارین

لطفا کدهاتون را تست کنید و بعد بذارین
موفق باشین
مهدی کیانی

iman_s52
سه شنبه 29 خرداد 1386, 18:16 عصر
این کد رو میذارم امیدوارم این یکی دیگه مشکلی نداشته باشه
واسه رویداد KeyPress مربوط به فرم :


if (e.KeyChar == (char)Keys.Return)
{
SendKeys.Send("{Tab}");
e.Handled = true;
}


بازم از دوستان معذرت میخوام لطف کنید تست کنید و خبرش رو بدین

choobin84
سه شنبه 29 خرداد 1386, 21:09 عصر
این کد رو میذارم امیدوارم این یکی دیگه مشکلی نداشته باشه
واسه رویداد KeyPress مربوط به فرم :


if (e.KeyChar == (char)Keys.Return)
{
SendKeys.Send("{Tab}");
e.Handled = true;
}
بازم از دوستان معذرت میخوام لطف کنید تست کنید و خبرش رو بدین

جواب داد.
ممنون

sabaab1359
سه شنبه 29 خرداد 1386, 21:39 عصر
از راهنماییتون ممنون.
پس نمی شه کاری کرد که فقط یک کد بنویسیم و برای همه کنترلها کار کنه؟
حالا یک مشکل دیگه این که برای combobox اگر بخواهیم با enter اول dropdown اون باز بشه و با enter بعدی متن انتخاب شده اون در textbox اون نشون داده بشه و بعد به کنترل بعد بره, میشه کاری کرد؟ من براش یک if نوشتم که اگر textbox اون خالی نباشه به کنترل بعد بره در غیر اینصورت dropdown اون رو باز کنه ولی هیچ کاری نکرد!
باز هم ممنون