PDA

View Full Version : استفاده از Enter به جای Tab



nazanin_z
یک شنبه 27 آذر 1390, 12:23 عصر
سلام
با چه کدی میتونم خاصیتی به دکمه enter بدم که بجای زدن دکمه tab بشه با Enter بین تکست باکسها و باتن حرکت کرد؟

gilas1368
یک شنبه 27 آذر 1390, 12:26 عصر
کافیه توی رویداد KeyDown هر کنترلتون کد زیر رو وارد کنین

switch (e.KeyValue)
{
case 13:
Controlname.Focus();
break;
}

solaleh
یک شنبه 27 آذر 1390, 13:12 عصر
در رویداد Keydown یا keyup از textbox:
if(e.KeyData == Keys.Enter)
{
Your_Control.Focus();
}

سوداگر
یک شنبه 27 آذر 1390, 14:50 عصر
سلام
کدهای دوستانمان درست، ولی برای چی می خواهید که با Enter روی باتن ها حرکت کنید؟!!
من توصیه می کنم در طراحی اینترفیس برنامه به گونه ای عمل کنید که مانند سایر برنامه های دیگر باشد، برای TextBox میتوانید چنین کاری را انجام دهید ولی برای باتن، معمول این است که Enter و Space، کار کلیک کردن را انجام دهند نه اینکه با زدن اینتر، فوکوس به یک کنترل دیگر منتقل شود!
موفق باشید.

nazanin_z
یک شنبه 27 آذر 1390, 15:14 عصر
کد رو وارد کردم اما هیچ تغییری ایجاد نشد!

NasimBamdad
سه شنبه 06 دی 1390, 19:51 عصر
از این کد استفاده کنید


protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Return)
SendKeys.Send("{TAB}");
return base.ProcessDialogKey(keyData);
}

برای دیتاگرید هم از این :


bool enterIsTab = true;
public bool EnterIsTab
{
get
{
return enterIsTab;
}
set
{
enterIsTab = value;
}
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if (msg.WParam.ToInt32() == (int)Keys.Enter)
{
if (enterIsTab)
{
SendKeys.Send("{tab}"); return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}

mohitlog
سه شنبه 06 دی 1390, 20:55 عصر
برای دیتاگرید هم از این :


bool enterIsTab = true;
public bool EnterIsTab
{
get
{
return enterIsTab;
}
set
{
enterIsTab = value;
}
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if (msg.WParam.ToInt32() == (int)Keys.Enter)
{
if (enterIsTab)
{
SendKeys.Send("{tab}"); return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
[/QUOTE]


سلام

میشه بگی این کد چکاری انجام میده؟
ستونهای گرید را بوسیله اینتر رد میکنه؟
با تشکر

NasimBamdad
چهارشنبه 07 دی 1390, 15:20 عصر
کدی که برای گرید هست :

با زدن اینتر به ستون سمت چپش میره . سعنی ستون کناریش

sayvan
چهارشنبه 07 دی 1390, 15:41 عصر
اگه دیتا گرید از این استفاده کن بهینه تره رویداد KeyDown
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{

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

}

NasimBamdad
چهارشنبه 07 دی 1390, 15:51 عصر
اگه دیتا گرید از این استفاده کن بهینه تره رویداد KeyDown
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{

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

}


فرض کنید برنامه رو نوشتید و کامل هست و شامل 50 فرم و 1000 تا کنترل هست ، واقعا سخته که تک تک برای هر کدام کد بنویسید .

:D

sayvan
چهارشنبه 07 دی 1390, 16:51 عصر
فرض کنید برنامه رو نوشتید و کامل هست و شامل 50 فرم و 1000 تا کنترل هست ، واقعا سخته که تک تک برای هر کدام کد بنویسید .

:D

با استفاده از این تابع میتونی هر جا لازمت بود استفاده کنی
private void evente(object ctl, KeyEventArgs s)
{
if (s.KeyCode == Keys.Enter)
{
s.Handled = true;
SendKeys.Send("{TAB}");
}
}

مثلاً در تکس باکس
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
evente(sender, e);

}

NasimBamdad
پنج شنبه 06 بهمن 1390, 17:08 عصر
این طوری خیلی سخت میشه ،

باید برای تمامی کنترل ها این کد رو نوشت

کدی نیست که یک بار در هر فرم بنویسی و این خاصیت رو برای تمامی کنترل ها انجام بده ؟

Esmail Solhkhah
شنبه 15 بهمن 1390, 17:40 عصر
این طوری خیلی سخت میشه ،

باید برای تمامی کنترل ها این کد رو نوشت

کدی نیست که یک بار در هر فرم بنویسی و این خاصیت رو برای تمامی کنترل ها انجام بده ؟

1: TabIndex کنترلهای موجود روی کانتینر (فرم - پنل - گروپ باکس -...) رو از 0 الی آخر ست کنید

2:خاصیت KeyPreview فرم رو True کنید

3:تو رویداد KeyDown فرم بنویسید:


if (e.KeyCode == Keys.Enter)
SelectNextControl(ActiveControl, true, true, true, true);

موفق باشید.

in_chand_nafar
شنبه 15 بهمن 1390, 21:18 عصر
بهتر است به جاي نوشتن در هر فرم يكبار براي هميشه يك كامپوننت TextBox سفارشي بسازيد كه كارهاي زير را انجام دهد
1. تغيير فوكوس با Enter
2. تغيير فوكوس با Arrow Keys
3. تغيير زبان صفحه كليد زماني كه TextBox به صورت RTL باشد
4. جدا كننده براي پول
5. Number Mode گذاشتن براي TextBox كه فقط عدد بگيرد
6.زماني كه فوكوس مي گيرد رنگ BG به زرد يا هر رنگ ديگري تبديل شود كه كاربر متوجه باشد كه فوكوس روي كدام TextBox هست
7. و...

Esmail Solhkhah
شنبه 15 بهمن 1390, 22:18 عصر
بهتر است به جاي نوشتن در هر فرم يكبار براي هميشه يك كامپوننت TextBox سفارشي بسازيد كه كارهاي زير را انجام دهدببخشید دوست عزیز ولی قراره ما کدی بنویسیم که با تمام کنترلها کار کنه (اینجوری برای هر کنترل موجود در فرم حالا یا تکست باکس یا کامبو یا ... باید به قول شما یه کنترل بنویسیم)

و با فرض استفاده از کامپوننتهای شرکتهای ثالت مثلا Janus یا DevExpress باید برا هر کدوم از اونا هم کنترل بنویسیم ؟

حالا نوشتیم، این کنترل جدید کنترل بعدیشو میخاد تا بتونه فوکوس بده

لطفا این موارد رو مششخص کنید.

in_chand_nafar
یک شنبه 16 بهمن 1390, 09:23 صبح
در پروژه ها بهتر است دوست عزیز از Drag & Drop کردن کنترلها خوداری کنید
اگر حتی با کنترل های شرکت های دیگر هم کار می کنید بهتر است نمونه سفارشی آنرا بسازید و فردای روزی اگر خواستید متدی، خاصیتی به آن اضافه کنید یک جا را تغییر دهید نه هر فرم را
نوشتن چند کنترل سفارشی که فوکوس می گیرد بهتر است از نوشتن کد در تمام فرم ها. شما فقط برای فوکوس نوشتید حالا برای تغییر BG و ... باید در هر فرم کدهای تکراری نوشت.

حالا کاری ندارم که شرکت ها همیشه با یک Framework اختصاصی که برای خودشون نوشتن کار می کنند، از ابزارها تا Framework (البته شما قرار نیست چرخ را اختراع کنید، همون ابزارهای شرکت های دیگر را می توانید سفارشی تر کنید)

Esmail Solhkhah
یک شنبه 16 بهمن 1390, 09:47 صبح
با تشکر از شما دوست عزیز

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

بعد دوستان اگه علاقه مند بودند میتونن گسترشش بدن، بنده هم سعی میکنم تو این تاپیک شرکت کنم

بحث خوبیه ، مخصوصا که این مورد رو بارها تو تالار دیدم، دست آخر هم که تکمیل شد اگه یکی از دوستان زجمت کشیده و داکیومنتش کنه و بذاره تو نمونه برنامه ها که عالی میشه

و مورد خیلی از دوستان حل میشه

با توجه به حضور جناب zarrinnegar (http://barnamenevis.org/member.php?31940-zarrinnegar) که الحق از دوستان فعال و زحمت کش تالار هست بنده در ادامه از ایشون خواهم خواست که نحوه ایجاد کنترلهای سفارشی رو برای مجموعه جانوس هم اگر وقت شد توضیح بدن

با تشکر از شما و همه دوستان زحمت کش تالار

موفق باشید.