PDA

View Full Version : سوال: جلوگیدی از درج عدد منفی در textbox



sarehhh
سه شنبه 22 مرداد 1387, 12:21 عصر
سلام دوستان

من یک textbox دارم که قراره توش عدد وارد بشه. می خواهم طوری تنظیمش کنم که کاربر نتواند عدد منفی وارد کنه یا اصلا کلید – صفحه کلید قفل بشه

ممنون میشم اگه راهنمایی کنین.

h.jaza
سه شنبه 22 مرداد 1387, 12:29 عصر
در رویداد keypress تکست باکست بنویس:




if(e.KeyChar == '-')
{
e.Handled = false;
}

DarkSoroush
سه شنبه 22 مرداد 1387, 12:46 عصر
راهی که h.jaza گفت حدودا درسته ولی اگر فرد مقدار را کپی پیست کنه هیچ رویدادی برای جلوگیری از عدد وارد شده وجود نداره. اصولا کار اعداد با تکست باکس بیمعنا و پر از اشکال است که شما همیشه باید در ترس از بروز خطا به سر ببرید.
بهتره از کنترل NumericUpDown استفاده کنید که البته باز هم قابلیت وارد کردن اعداد مستقیم از صفحه کلید را هم دارار است با این تفاوت که شما میتونید با تنظیم ویژگی های Max و Min رنج اعدادی که نیاز دارید را محدود و البته مقدار وارد شده را از ویژگی Value در یافت کنید. بدون دردسر!!

sarehhh
سه شنبه 22 مرداد 1387, 12:47 عصر
h.jaza این کارو کردم، ولی باز عدد منفی درج می شه!

sarehhh
سه شنبه 22 مرداد 1387, 13:20 عصر
من می خواهم توی textbox اعداد دسیمال هم درج کنم. با numericUpDown می شه این کارو کرد؟

ضمنا نمی خواهم دکمه های روی کنترول مشخص بشه.

h.jaza
سه شنبه 22 مرداد 1387, 14:06 عصر
خوب احتمالا یکم اشتباه گفتم، چون من الان روی این سیستمم ویژوال استودیو ندارم و این کدو از حفظ گفتم.
احتمالا اگر به جای KeyChar از KeyCode استفاده بکنی درست می شه. بغیر از این اگر خودت توجه کنی می تونی کلید "-" رو از بخش Key ها پیدا کنی.(....... .Key)
البته بغیر از این با MaskedTextBox هم می تونی کار کنی و محدودتو خیلی ساده تر تعریف کنی و دیگه نگران کپی پیست از خارج محیط برنامه هم نباشی.
در اولین فرصت صورت درستشو وست می فرستم.
راستی از DarkSoroush (http://barnamenevis.org/forum/member.php?u=69765) هم می خوام که بیشتر راجع به numericUpDown توضیح بده.

sarehhh
سه شنبه 22 مرداد 1387, 15:14 عصر
ببین کد من این جوری شد:


private void txtWeight_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '-')
{
// MessageBox.Show(Convert.ToString(e.KeyChar));
e.KeyChar = '';
}

}


منتها .Net ، کتیشن یکیی رو به عنوان کاراکتر خالی قبول نمی کنه!

در واقع می خواهم بهش بگم به جای – ، کاراکتر خالی بذار.

Salar Ashgi
سه شنبه 22 مرداد 1387, 15:32 عصر
کد مورد نظر شما :



private void textBox1_TextChanged(object sender, EventArgs e)
{
int size = textBox1.TextLength;
string s = textBox1.Text;
int f;
if (size >= 2)
{
for (int i = 0; i < size; i++)
{
if (s[i] == '-')
{
f = (int)(s[i + 1]);
if (f >= 48 && f <= 57)
{
MessageBox.Show("Error");
textBox1.Text = "";
break;
}
}
}
}

}


موفق و پیروز باشی دوست عزیز !!!

sarehhh
سه شنبه 22 مرداد 1387, 16:00 عصر
مرسی از همگی.
فقط اگه لطف کنین راهنمایی کنبن که چه طور یه کارکتر خالی رو به یه textBox نسبت بدم؟

Salar Ashgi
سه شنبه 22 مرداد 1387, 16:07 عصر
مرسی از همگی.
فقط اگه لطف کنین راهنمایی کنبن که چه طور یه کارکتر خالی رو به یه textBox نسبت بدم؟

=====================
اگر منظورتان این است ؟؟!!


textBox1.Text = " ";



موفق باشی دوست عزیز !!!

DarkSoroush
سه شنبه 22 مرداد 1387, 20:04 عصر
این کنترل ویژگی های جالبی داره. مثلا میتونید با تغییر خاصیت DecimalPlaces کاری کنید که همیشه این کنترل تعداد خاصی اعداد پشت ممیز را نمایش دهد.
یا خاصیت Hexadecimal که با فعال کردن این خاصیت کنترل میتونه اعداد مبنای شانزده را هم قبول کند که البته به کد مبنای ده را تحویل میدهد.
همچنین قابلیت اضافه کردن نماد "," را هم بعد از هر سه رقم دارد البته بعد از فعال کردن خاصیت ThousandsSeparator.
قابلیت Min و Max را هم که قبلا توضیح دادم.
در ضمن وجود اون دو کلید هیچ عیبی ندارد چرا که اگر کنترل قراره مقدار عددی بگیره که این کار خیلی استانداردتر است و وجود دو کلید بالا و پایین هم طبیعی کما اینکه یوزر ممکنه یک عدد را یک مقدار پایین تر وارد کرده باشد و با استفاده از کلیدهای up و down مقدار را تصحیح کند ولی در تکست باکس باید حتما یوزر یک بار از کلید backspace و سپس عدد درست استفاده کند. به این موضوع تسلط نداشتم کاربر بر روی کلید backspace به علت موقعیت این کلید را هم اضافه کنید
برای جلوگیری از وارد کردن اعداد اعشاری کد زیر را به رویداد ValueChanged کنترل اضافه کنید:


CType(sender, NumericUpDown).Value = Decimal.Round(CType(sender, NumericUpDown).Value, MidpointRounding.AwayFromZero)


ولی اگر اعداد اعشاری را نیاز دارید که بله این کنترل این ویژگی را دارا است.
موفق باشید.
- سروش

Leon_pro
سه شنبه 22 مرداد 1387, 20:36 عصر
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((Convert.ToInt64(e.KeyChar) > 57 || Convert.ToInt64(e.KeyChar) < 48) && e.KeyChar != Convert.ToChar(Keys.Delete) && e.KeyChar != Convert.ToChar(Keys.Back))
e.KeyChar = '\0';
}

برای نسبت دادن مقدار خالی به یه textbox میتونی مقدارش رو
TextBox1.Text = "";کنی اگر هم می خوای در متد KeyPress مقدار e.Keychar رو تهی کنی چون از نوع Char هستش باید
e.KeyChar ='\0' بکنی

sarehhh
سه شنبه 22 مرداد 1387, 21:09 عصر
salar_cpp_cs منظورم این نبود.
ببین من می خواهم توی Event keypress کد زیر رو بذارم،


private void txtWeight_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '-')
{
// MessageBox.Show(Convert.ToString(e.KeyChar));
e.KeyChar = '';
}

}
در واقع می خواهم بگم که اگر کاربر مقدار '-' رو وارد کرد، به جای این مقدار هیچی بذار ، اما وقتی می نویسم

e.KeyChar = '';
روی این خط error می گیره!
به e.KeyChar چی نسبت بدم که معنیش این باشه؟

sarehhh
سه شنبه 22 مرداد 1387, 21:13 عصر
مرسی از همه ی دوستان .
بالاخره دوزاریم افتاد!!

h.jaza
سه شنبه 22 مرداد 1387, 21:37 عصر
خوب من بالاخره رسیدم خونه و پشته سیستمه خودم تونستم بشینم. کدو چک کردم. درستش اینه:




private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '-')
{
e.Handled = true;
}
}



البته این درحالتی هست که از تکست باکس استفاده بکنی.
و برای زمانی هم که کپی پیست میشه از جای دیگه اینو می نیویسیم:




private void textBox1_TextChanged(object sender, EventArgs e)
{
foreach (char ch in textBox1.Text)
{
if (ch == '-')
{
textBox1.Text = textBox1.Text.Replace("-", "");
}
}
}



به همین سادگی...
البته با این کار شما از ورود حروف جلوگیری نکردی و برای اون هم می بایست جداگونه چک کنی.

h.jaza
سه شنبه 22 مرداد 1387, 21:42 عصر
البته یه راه دیگه هم داره که این همه مشکلا رو نداره و اونم استفاده ازRichTextBox هست که در این صورت فقط یه محدودیت داری و اونم تعداد کراکتر های ورودیت خواهد بود.
وسه این حالت به این صورت عمل می کنیم که یه خصوصیت ماسک ریچ تکست باکس رو روی Number می زاری و اگر هم تعداد کاراکتر بیشتر یا کمتری می خواستی از بخش پایینش همونجوری که خودش برات سمپل گذاشته تعداد کاراکتر ها تو مشخص می کنی.
همون جور که گفتم تنها عیبش اینه که تعداد کاراکتر هاش محدوده ولی کارو را میندازه.
حالا انتخاب با شماس که کدوم حالتو متناسب با کارت انتخاب کنی.:اشتباه: