PDA

View Full Version : آموزش: انتقال به کنترل بعد با زدن دکمه Enter



Pioneers
یک شنبه 09 دی 1386, 23:03 عصر
اگه برنامه رسمی نوشته باشید، حتما نیاز شده که در فرمهاتون با زدن دکمه Enter کیبرد، Focus به کنترل بعد منتقل بشه. انجام اینکار به چند خط کد برای هر کنترل نیاز داره و اگه قرار باشه با زدن دکمه Ctrl+Enter عکس این عمل انجام بشه، کد ها دو برابر میشه. حال اگه یه فرم ثبت اطلاعات، شامل 30 عدد کنترل باشه، کلی کد لازمه و خطایابی اون هم سخت تر میشه.

در اینجا کدی میبینید که خود من اونو توی یه Dll گذاشتم و در برنامه هام از اون استفاده میکنم. اون هم با یک خط کد که نام تمام کنترلها رو شامل میشه:




public void Set_Focs(string Key, KeyEventArgs e, params Control[] Ctrl)
{
//================================================
if (!e.Control && e.KeyCode == Keys.Return)//حرکت به جلو
for (int i = 0; i < Ctrl.Length; i++)
{
if (Ctrl[i].ContainsFocus && i != Ctrl.Length - 1)
{
Ctrl[i + 1].Focus(); break;
}
else if (Ctrl[Ctrl.Length - 1].ContainsFocus)//کنترل آخر
{
SendKeys.Send(Key); break;
}
}
//================================================
else if (e.Control && e.KeyCode == Keys.Return)//جرکت به عقب
for (int i = 0; i < Ctrl.Length; i++)
{
if (Ctrl[i].ContainsFocus && i != 0)
{
Ctrl[i - 1].Focus(); break;
}
else if (Ctrl[0].ContainsFocus)//کنترل اول
{
SendKeys.Send(Key); break;
}
}
}



پارامتر اول کلیدی است که برای اجرای رویداد کلیک اولین دکمه (معمولا ثبت) بکار میره. مثلا F2 که باید دو تا براکت دو طرفش باشه.
پارامتر دوم آرگومان ایجاد شده در رویداد Key_Down است.
پارامتر سوم هم لیست کنترلهاست که به ترتیب مینویسیم.


نحوه استفاده در رویداد Key_Down یا Key_Up:



Set_Focs("{F2}", e, txtName, txtFamily, btnReg)

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

تذکر: این روش یه اشکال هم داره که بعدا پیگیری میکنیم.
تذکر: اگه دکمه کلید دسترسی سریع نداشت می تونیم از Delegate استفاده کنیم تا در صورتیکه Focus در کنترل آخر بود، این دکمه اجرا گردد. در صورت نیاز میفرستم.

Pioneers
دوشنبه 10 دی 1386, 12:49 عصر
آقای silentrise، آیا از این متد استفاده کرده اید تا یک سوال بپرسم؟