PDA

View Full Version : پرش کرسر از یک باکس به باکس بعدی



shima2006
دوشنبه 27 دی 1389, 14:24 عصر
سلام دوستان
من میخوام با پر شدن یک Mask Box ، کرسر به Mask Box دیگه بپره ...
میدونم باید از خصوصیت Mask1.Lenght استفاده کنم ولی چطوری و کجاشو نمی دونم ؟!
کسی میدونه چطوری باید این کارو کنم؟!
سپاسگذارم

2ndesigner
دوشنبه 27 دی 1389, 14:57 عصر
private void maskedTextBox1_TextChanged(object sender, EventArgs e)
{
if (maskedTextBox1.MaskCompleted==true)
{
maskedTextBox2.Focus();
}
}

shima2006
دوشنبه 27 دی 1389, 15:10 عصر
سلام دوست من
متشکرم از راهنماییتون
کدتون جالب بود ولی متاسفانه هیچ اتفاقی نمی افته!!!
یعنی حتی دستور IF اجرا نمیشه ، نمی دونم مشکل از کجاست؟!

AmirHarirbafan
دوشنبه 27 دی 1389, 16:03 عصر
کد مشکلی نداره ، فکر کنم مشکل کار جای دیگه ای باشه. :چشمک:

tooraj_azizi_1035
دوشنبه 27 دی 1389, 16:04 عصر
سلام،
کد 2ndsigner رو در KeyPress تست کن.

Reza_Yarahmadi
دوشنبه 27 دی 1389, 21:34 عصر
توی رویداد TextChange همه تکست باکسها کد زیر رو بنویسید


if ((sender as MaskedTextBox).MaskCompleted)
this.SelectNextControl(this.ActiveControl, true, true, true, true);

به نمونه ساده زیر نگاه کنید

shima2006
دوشنبه 27 دی 1389, 22:28 عصر
سلام،
کد 2ndsigner رو در KeyPress تست کن.

تویه KeyPress گذاشتم حالا اجرا میشه ولی با این ایراد که بعد از پر شدن Mask باید یک دکمه دیگه بزنم تا بره به Mask بعدی ، که خب درست هم هست !
باید تو همون TextChange کار کنه که انگار نه انگار....

shima2006
دوشنبه 27 دی 1389, 23:04 عصر
توی رویداد TextChange همه تکست باکسها کد زیر رو بنویسید


if ((sender as MaskedTextBox).MaskCompleted)
this.SelectNextControl(this.ActiveControl, true, true, true, true);

به نمونه ساده زیر نگاه کنید

خیلیییییییی عجیبه من دقیقا همین کار رو انجام میدم ولی اتفاقی نمیفته!!!!!!!!
ممکنه به این خاطر باشه که من کنترلهایه دیگه ای هم در فرمم دارم؟!
البته من برای Mask ها به ترتیب Tab Index تعریف کردم...

آقا درست شد ، دم همتون گرم:لبخند:

shima2006
چهارشنبه 06 بهمن 1389, 11:03 صبح
این کار یه روش دیگه هم داره که من یه تابع براش نوشتم :


private void selectNextBox(KeyPressEventArgs e, object sender, TextBox NextBox, int p)
{
if ((sender as TextBox).Text.Length == p)
{
NextBox.Focus();
e.Handled = true;
}
}

حالا من میخوام بدونم اگه بخوام با BackSpace یکی یکی کاراکترها رو پاک کنم به عقب برگردم (یعنی با BackSpace یکی یکی از باکسی به باکس قبلی حرکت کنم) برای این کار باید چیکار کنم؟!

Reza_Yarahmadi
چهارشنبه 06 بهمن 1389, 22:13 عصر
با یک مقدار دستکاری نمونه ای که گذاشتم میتونید این کار رو انجام بدید.
مثال زیر رو نگاه کنید.

shima2006
شنبه 16 بهمن 1389, 08:47 صبح
در مثالی که زدین رویداد textBox1_TextChanged کاری رو که من میخوام انجام میده ولی نمی دونم دو قسمت زیر چه کاری انجام میدن!
اگه یه توضیحی بدین ممنون میشم:


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != 8 && (sender as TextBox).Text.Length == 5)
{
e.Handled = true;
if ((sender as TextBox).TabIndex != 5)
this.SelectNextControl(this.ActiveControl, true, true, true, true);
}
}



private void textBox1_Enter(object sender, EventArgs e)
{
(sender as TextBox).Select((sender as TextBox).Text.Length, 1);
}

Reza_Yarahmadi
شنبه 16 بهمن 1389, 11:06 صبح
كداول ميگه در صورتيكه كليد فشار داده شده BackSpace نبود و طول رشته درون تكست باكس برابر 5 بود كاراكتر جديدي اضافه نكنه (e.Handled = true) و اگر تكست باكس آخر نبود(TabIndex != 5) بره به كنترل بعدي.
كد دوم هم ، چون وقتي فوكوس وارد يه تكست باكس ميشه كرسر رو در اول متن تكست باكس قرار ميده ، توي كد گفته شده وقتي فوكوس وارد شد بره آخر متن قرار بگيره(براي مواردي كه برميگرده به كنترل قبلي)