PDA

View Full Version : تكس باكسي كه فقط عدد بگيرد



morteza.azad
شنبه 16 خرداد 1388, 12:45 عصر
سلام .من تكس باكسي دارم كه مي خوام موقعي كه كاركتري وارد ميشه فقط عدد وارد بشه و همينطور كليد back space هم كار كنه.البته من يك كدي نوشتم كه تنها عدد رو ميگيره ولي back space هم كار نميكنه.
ممنون


if(!(e.keychar>='0' && e.keychar)<='9')
e.handled=true;

mrs Izadi
شنبه 16 خرداد 1388, 15:11 عصر
میتوانید از این کد استفاده کنید


if ((e.KeyChar != (char)8) && (e.KeyChar!=(char)Keys.D0) && (e.KeyChar!=(char)Keys.D1) && (e.KeyChar!=(char)Keys.D2) && (e.KeyChar!=(char)Keys.D3) && (e.KeyChar!=(char)Keys.D4) && (e.KeyChar!=(char)Keys.D5)&& (e.KeyChar!=(char)Keys.D6) && (e.KeyChar!=(char)Keys.D7) && (e.KeyChar!=(char)Keys.D8)&& (e.KeyChar!=(char)Keys.D9))
e.Handled =true;

taghvajou
شنبه 16 خرداد 1388, 16:18 عصر
سلام این کمپوننت رو به سیستم اضافه کنین از محصولات شرکت خودمونه! یه کنترلی هست به نام text box pro که یه پراپرتی داره که میشه رو اینتیجر یا ... تنظیم کرد، ضمنا یکی هم هست که money box که برای قیمت به کار میره. هر دو خودشون ولیدیت می کنند. ضمنا اگر به مشکلی برخوردین به پشتیبانی نرم افزار هامون (خانم مهندس رضاوندی) تو سایتمون (www.farantech.com (http://www.farantech.com)) مراجعه کنین و اسم بنده رو (تقوی جو) بدین، راهنمایی تون میکنه! چیزی دیگه هم لازم داشتین در خدمتیم

dare_khamosh
شنبه 16 خرداد 1388, 16:58 عصر
این کد رو بنویس 100% جواب میده
در پروپرتیس قسمت Event خاصیت KeyPress رو دابل کلیک کن و بعد توش این دستور if رو بنویس



private void textbox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar)))
{
e.Handled = true;
{
{

mohsen_csharp
شنبه 16 خرداد 1388, 18:54 عصر
این کد رو بنویس 100% جواب میده
در پروپرتیس قسمت Event خاصیت KeyPress رو دابل کلیک کن و بعد توش این دستور if رو بنویس

private void textbox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar)))
{
e.Handled = true;
{
{
دوست عزیز هیچ وقت از چیزی 100% مطمئن نباشید.این مثال شما یک باگ بزرگ دارد چون اگه کاربر بیاد روی اون یک رشته رو paste کنه اونوقت دیگه این رویداد اجرا نمیشه.
شما همیشه باید از رویداد textChanged استفاده کنید و در این رویداد بررسی داده وارد شده را انجام دهید و اگه داده نامعتبر بود مقدار قبلی آن را جایگزین کنید.
بنده یک مثال در تایپیک زیر قرار داده ام:
http://barnamenevis.org/forum/showthread.php?t=156908&highlight=watermarkbox

morteza.azad
شنبه 16 خرداد 1388, 21:16 عصر
ممنون از همه شما واقعا عالي بود.

mojtaba1363
یک شنبه 17 خرداد 1388, 01:40 صبح
سلام دوست عزیز

این کد رو بنویس شاید درست بشه


private void textBox9_TextChanged(object sender, EventArgs e)
{
textBox9.Text = decimal.Parse(textBox9.Text).ToString("##########");
textBox9.SelectionStart = textBox9.Text.Length;

}


http://barnamenevis.org/forum/showthread.php?t=162352

ASKaffash
یک شنبه 17 خرداد 1388, 08:55 صبح
سلام
نیازی به این روشها نیست کنترل MaskedTextBox هدفش همین کارهاست فقط کافیست که خاصیت Mask آن را مثلا به 9999 تنظیم کنید تا یک عدد چهار رقمی مثبت دریافت کند
درضمن دوستانی که از Keypress استفاده میکنند دقت کنند که این روش اساسا در حالت ذیل Bug دارد:
وقتیکه در ClipBoard مقداری غیر عددی وجودداشته باشد و با Click سمت راست موس Paste را انتخاب کنید متن درون ClipBoard به شما تحمیل میشود چون اصلا Event مربوط به Keypress و امثالهم متوجه این موضوع نمی شوند لطفا این موضوع را تست کنید تا ببینید من هم کد ارائه شده را تست کردم

dare_khamosh
یک شنبه 17 خرداد 1388, 10:05 صبح
دوست عزیز هیچ وقت از چیزی 100% مطمئن نباشید.این مثال شما یک باگ بزرگ دارد چون اگه کاربر بیاد روی اون یک رشته رو paste کنه اونوقت دیگه این رویداد اجرا نمیشه.
شما همیشه باید از رویداد textChanged استفاده کنید و در این رویداد بررسی داده وارد شده را انجام دهید و اگه داده نامعتبر بود مقدار قبلی آن را جایگزین کنید.
بنده یک مثال در تایپیک زیر قرار داده ام:
http://barnamenevis.org/forum/showthread.php?t=156908&highlight=watermarkbox

آقای mohsen_csharp (http://barnamenevis.org/forum/member.php?u=36508) حالا من تازه کارم و فقط 3 ماه که دارم مثلا برنامه نویسی می کنم<گوش شیطون کر> شما که این کاره ای چرا؟
این کنترلی که آقای ASKaffash (http://barnamenevis.org/forum/member.php?u=63973) معرفی کردن که درست کار می کنه و نمیشه توش متن رو هم کپی کرد و دیگه لازم به این همه کد نبود.
در ضمن من از بعضی چیزها 100% مطمئنم مثلا الان مطمئنم که دارم تایپ می کنم و پیتزا نمی خورم، پی میشه بعضی وقت ها از چیزی 100% مطمئن بود.

mohsen_csharp
یک شنبه 17 خرداد 1388, 11:05 صبح
آقای mohsen_csharp (http://barnamenevis.org/forum/member.php?u=36508) حالا من تازه کارم و فقط 3 ماه که دارم مثلا برنامه نویسی می کنم<گوش شیطون کر> شما که این کاره ای چرا؟
این کنترلی که آقای ASKaffash (http://barnamenevis.org/forum/member.php?u=63973) معرفی کردن که درست کار می کنه و نمیشه توش متن رو هم کپی کرد و دیگه لازم به این همه کد نبود.
دوست عزیز بنده می دانم که کنترل آقای ASKaffash (http://barnamenevis.org/forum/member.php?u=63973)درست کار می کنه هدف اصلی بنده فقط یک تکست باکس که فقط عدد بگیره نبود بلکه اگه به لینکی که من گذاشتم خوب نگاه می کردی قابلیت های دیگر اونو میدیدی. از جمله داشتن قابلیت WaterMark و همچنین قابلیت cancel کردن رویداد TextValueChanged و رنگ های قلم متفاوت برای متن و WaterMark و...

morteza.azad
یک شنبه 17 خرداد 1388, 13:46 عصر
سلام خدمت همه دوستان:
متاسفانه كد كه mohsen_csharp نوشتن ، مشكل قبلي اي كه من داشتم رو حل نكرد.
من مي خوام ضمن اينكه تكس باكسم فقط عدد بگيره و اينكه كليد back space هم كار كنه.
كه فقط كدي كه mrs Izadi دادن درست كار ميكنه و بقيه هم مشكل داره.
جواب به ASKaffash : من ممكنه كه عددم بزرگتر از 4 رقم باشه. اونوقت چيكار كنم.
و taghvajou : كامپوننت شما قسمت text box pro كار نميكرد.

تنكس

mohsen_csharp
یک شنبه 17 خرداد 1388, 17:24 عصر
متاسفانه كد كه mohsen_csharp نوشتن ، مشكل قبلي اي كه من داشتم رو حل نكرد.
من مي خوام ضمن اينكه تكس باكسم فقط عدد بگيره و اينكه كليد back space هم كار كنه.
WaterMarkBox که بنده گذاشتم کاملا کار می کنه.
شما ازش درست استفاده نکردید.
تو اون مثالی که بنده گذاشتم ببینید در WaterMarkBox پایینی می تونی عددی خارج از محدوده یک تا صد وارد کنی؟
درضمن کلیدهای back space و delete به درستی کار می کنند.
احتمالا شما فراموش کردید که از این رویداد استفاده کنید

private void waterMarkBox3_ValueTextChangedEvent(object sender, mohsen_csharp.ValueTextChangedEventArgs e)
{
if (waterMarkBox3.HasValue)
{
int b;
if (!int.TryParse(waterMarkBox3.ValueText, out b))
e.Cancel = true;
else if (b > 100 || b < 1)
e.Cancel = true;
}
}