PDA

View Full Version : تغییر کنترل در یک فرم change focus



once4ever
شنبه 01 اسفند 1383, 21:17 عصر
من میخوام در یک فرم با زدن کلیدهای مشخصی از کیبورد کنترل (فوکوس) از یک کنترل به کنترل بعدیش ببرم. (فعلا از یک آرایه از نوع کنترل استفاده کردم با چندتا شرط فوکوس بودن ولی حتما راه منطقی تری وجود داره!)

Peyman_Ranjbar
یک شنبه 02 اسفند 1383, 01:15 صبح
چند راه داری
:kaf: 1
از تابع SendKey استفاده کنی

2
از حلقه foreach استفاده کنی

3

چرا از Tabstop خود کنترلها استفاده نمی کنی

منوی View -> TabOrder
بعد با استفاده از موس نحوه دسترسی اونها رو مشخص کن

once4ever
یک شنبه 02 اسفند 1383, 10:07 صبح
مرسی از جوابت اما:
1. به نظر من تابع sendkey یک جور راه فرار آماتور (البته شوخی میکنمو ولی دنبال راه اصولیش میگردم :موفق: )
2. حلقه foreach رو بیشتر توضیح بده (فکر کنم همون راهیه که فعلا ازش استفاده میکنم)
3.میخوام کاربر با زدن کلید جهت پایین تغییر کنترل انجام بشه و بره به کنترلی که در tabstop بعد قرار داره نه با کلید tab

C# Programmer
یک شنبه 02 اسفند 1383, 22:31 عصر
فکر کنم ساده ترین راه این باشه که در تابع KeyDown برای هر کنترل استفاده کنی


private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyValue == 40)
textBox2.Focus() ;
}


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

once4ever
دوشنبه 03 اسفند 1383, 12:01 عصر
مرسی از جوابت c# programmer ولی بیشتر به سوالم توجه کن :wink:
تو برنامه مشخص نیست که کدوم کنترل فعال هست و کنترل بعدیش چیه مگه با دستورهای خاص خودش

Peyman_Ranjbar
دوشنبه 03 اسفند 1383, 23:38 عصر
تو برنامه مشخص نیست که کدوم کنترل فعال هست و کنترل بعدیش چیه مگه با دستورهای خاص خودش

یعنی خودت هم نمی دونی کنترل بعدیش چیه؟

این دیگه دست خودته که کنترل قبل و بعدش رو انتخاب کنی :sunglass:

once4ever
سه شنبه 04 اسفند 1383, 13:46 عصر
تو برنامه مشخص نیست که کدوم کنترل فعال هست و کنترل بعدیش چیه مگه با دستورهای خاص خودش

یعنی خودت هم نمی دونی کنترل بعدیش چیه؟

این دیگه دست خودته که کنترل قبل و بعدش رو انتخاب کنی :sunglass:

ازشما بعید بود رییس :sunglass: !!! من نمیخوام برای هر کنترل یه تابع keydown بسازم و داخل اون بگم اگه کلید پایین زده شد برو به این کنترل خاص. بلکه میخوام برای همه کنترلها یه تابع درست کنم و بگم اگه جهت پایین زده شد برو به کنترل بعدی :موفق:

C# Programmer
جمعه 07 اسفند 1383, 12:18 عصر
سلام
فکر کنم این تابع که نوشتم به دردت بخوره
خودم امتحانش کردم جواب میده
اگه غیر از textBox کنترل دیگه ای هم داری باید تابع رو یکم تغییر بدی ... خودت که اوستایی :sunglass:



private void NextActiveControl(Control c, bool up_down)
{
Control temp = GetNextControl(c, up_down) ;
try
{
if (temp.Enabled)
{
((TextBox)temp).SelectAll() ;
temp.Focus() ;
}
else
{
NextActiveControl(temp, up_down) ;
}
}
catch
{
if (!up_down)
{
((TextBox)this.Controls[0]).SelectAll() ;
this.Controls[0].Focus() ;
}
else
{
((TextBox)this.Controls[this.Controls.Count-1]).SelectAll() ;
this.Controls[this.Controls.Count-1].Focus() ;
}
}
}


این هم یه نمونه برای استفادش



if(e.KeyValue == 38)
NextActiveControl(textBox1, false) ;
if(e.KeyValue == 40)
NextActiveControl(textBox1, true) ;


موفق باشی :موفق: