PDA

View Full Version : معتبر سازی داده ها



jafari_m246
پنج شنبه 24 خرداد 1386, 06:23 صبح
سلام
می خواستم ببینم چطوری میتوانم ورودی های textbox را محدود کنم
مثلا بگم فقط عدد یا فقط رشته بگیر
ممنون

سار
پنج شنبه 24 خرداد 1386, 09:12 صبح
بگرد یکی قبلن کلاسش رو تو همین تالار Upload کرده بود
فکر کنم اسمش NumBox بود.

Keramatifar
پنج شنبه 24 خرداد 1386, 09:27 صبح
از Validator ها استفاده کن، قبلا خیلی در مورد Validator ها بحث شده، اصلا مطمئنم یک تاپیک هم با همین عنوان قبلا ایجاد شده، سرچ کن پیدا می کنی

kiani.mehdi
پنج شنبه 24 خرداد 1386, 09:57 صبح
سلام
می خواستم ببینم چطوری میتوانم ورودی های textbox را محدود کنم
مثلا بگم فقط عدد یا فقط رشته بگیر
ممنون


کافیه تو رویداد keypress مربوط به textbox این کد را بنویسی





e.Handled = !(char.IsDigit(Convert.ToChar(e.KeyChar)) || char.IsControl(Convert.ToChar(e.KeyChar)));



البته این برای عدد هست (یعنی فقط عدد بگیره)

البته عاقلانه نیست که برای همه textBox هات این کار را بکنی
بهتره یه کلاس تعریف کنی که از textbox ارث بری کنه و یعد رویداد فوق را براین انoverride کنی و کدی که گفتم را درآن بنویسی و هرجا که خواستی از اون استفاده کنی

برای اینکه فقط متن هم بگیره از روش فوق میتونی استفاده کنی فقط باید کنتر ل کنی که اگه ورودی متن هست اجازه پردازش و ورود داده بشه


موفق باشید
مهدی کیانی

Keramatifar
پنج شنبه 24 خرداد 1386, 13:08 عصر
آقا چرا انقدر خودتونو به در و دیوار می کوبید؟
مگه Validatorها چشونه؟

اَرژنگ
پنج شنبه 24 خرداد 1386, 13:44 عصر
آقا چرا انقدر خودتونو به در و دیوار می کوبید؟
مگه Validatorها چشونه؟

ولیدیتورها ربطی به اینکه تکست باکس چی قبول کنه ندارند، یک روش اصلا اجازه نمیده که کاراکتر غیره قابل قبول تایپ بشه، دیگر اسمش روشه، بعد از اینکه مقدار وارد شد ، ولیدیت میکنه.
برایه کارهایه مختلف از روشهایه مختلف استفاده میشه.

PC2st
پنج شنبه 24 خرداد 1386, 14:41 عصر
جناب kiani.mehdi ممنون، کد جالبی بود...

در کد مذکور، اگر یک رشته (حاوی حروف) رو از طریق کپی و paste به داخل این textBox بندازیم، یک جورائی مثل راه مخفی (!) میشه و اینطوری حروف میتوانند در textBox قرار بگیرند. کاربر از طریق ctrl+V میتونه عمل paste به داخل textBox رو انجام بده، وقتی که کاربر کلید ctrl+v رو فشار میده، مقدار عددی از خاصیت e.KeyChar برابر با 22 خواهد شد. پس باید این کاراکتر هم کنترل بشه و clipboard جستجو بشه تا متن موجود، فاقد حروف باشه.
یعنی میشه شرط زیر رو اضافه کرد:


if( e.KeyChar == Convert.ToChar( 22 ) )
{
//کنترل شود که متن داخل کلیپ بورد، عاری از حروف باشه
}

با اضافه کردن کد بالا، کاربر با کلیک راست و انتخاب گزینه Paste، باز هم میتونه یک رشته حاوی حروف رو به textBox وارد کنه که این رو هم باید مد نظر گرفت.

SalarSoft
پنج شنبه 24 خرداد 1386, 16:55 عصر
جستجو هم بد نیست هر از چند گاهی
http://www.codeproject.com/cs/miscctrl/Validator.asp

jafari_m246
جمعه 25 خرداد 1386, 12:03 عصر
با سلام
و تشکر فراوان از دوستانی که در این زمینه من را راهنمائی کردند

kiani.mehdi
جمعه 25 خرداد 1386, 13:00 عصر
جناب kiani.mehdi ممنون، کد جالبی بود...


خواهش میکنم




در کد مذکور، اگر یک رشته (حاوی حروف) رو از طریق کپی و paste به داخل این textBox بندازیم، یک جورائی مثل راه مخفی (!) میشه و اینطوری حروف میتوانند در textBox قرار بگیرند. کاربر از طریق ctrl+V میتونه عمل paste به داخل textBox رو انجام بده، وقتی که کاربر کلید ctrl+v رو فشار میده، مقدار عددی از خاصیت e.KeyChar برابر با 22 خواهد شد. پس باید این کاراکتر هم کنترل بشه و clipboard جستجو بشه تا متن موجود، فاقد حروف باشه.
یعنی میشه شرط زیر رو اضافه کرد:
کد:
if( e.KeyChar == Convert.ToChar( 22 ) )
{
//کنترل شود که متن داخل کلیپ بورد، عاری از حروف باشه
}
با اضافه کردن کد بالا، کاربر با کلیک راست و انتخاب گزینه Paste، باز هم میتونه یک رشته حاوی حروف رو به textBox وارد کنه که این رو هم باید مد نظر گرفت.




همه چیز را که نباید کامل گفت ، پس اون موقع تلاش خودتون چی میشه ؟ اینجا فقط برای راهنمایی کردنه
واسه همین من کامل توضیح ندام
نیازی به کارهای بالا که شما کردین نیست
تکست باکس ها یه خاصیتی دارن به نام shortcutsEnabled که اگه اونو false کنی دیگه نه
ctrl + v کار میده نه کلیک راست
موفق باشید
مهدی کیانی

PC2st
جمعه 25 خرداد 1386, 13:26 عصر
تکست باکس ها یه خاصیتی دارن به نام shortcutsEnabled که اگه اونو false کنی دیگه نه
ctrl + v کار میده نه کلیک راست
ممنون، این هم نکته جالبی بود :)
البته کپی و Paste صورت بگیره بهتره... و چک کنیم که عدد باشه.

jafari_m246
پنج شنبه 07 تیر 1386, 07:10 صبح
کافیه تو رویداد keypress مربوط به textbox این کد را بنویسی





e.Handled = !(char.IsDigit(Convert.ToChar(e.KeyChar)) || char.IsControl(Convert.ToChar(e.KeyChar)));



البته این برای عدد هست (یعنی فقط عدد بگیره)

البته عاقلانه نیست که برای همه textBox هات این کار را بکنی
بهتره یه کلاس تعریف کنی که از textbox ارث بری کنه و یعد رویداد فوق را براین انoverride کنی و کدی که گفتم را درآن بنویسی و هرجا که خواستی از اون استفاده کنی

برای اینکه فقط متن هم بگیره از روش فوق میتونی استفاده کنی فقط باید کنتر ل کنی که اگه ورودی متن هست اجازه پردازش و ورود داده بشه


موفق باشید
مهدی کیانی


سلام
من نتوانستم این کد را رشته تبدیل کنم اگر ممکنه راهنمائی ام کنید

kiani.mehdi
پنج شنبه 07 تیر 1386, 10:31 صبح
سلام
من نتوانستم این کد را رشته تبدیل کنم اگر ممکنه راهنمائی ام کنید

اگر منظورتون اینه که تکست باکسی داشته باشین که فقط حرف بگیره این کدشه




e.Handled = !(char.IsLetter(e.KeyChar) || char.IsControl(e.KeyChar));




ولی اگه منظورتون چیزه دیگست بیشتر توضیح بدین
موفق باشید
مهدی کیانی

hdv212
پنج شنبه 07 تیر 1386, 12:40 عصر
خیلی خودتونو اذیت میکنید، از کنترل MaskedTextBox استفاده کن، و در قسمت property، روی گزینه ی Mask کلیک کن و در پنجره ی ظاهر شده، گزینه ی اول رو یعنی Numeric رو انتخاب کنید، در قسمت پایین همون پتجره هم میبینی 5 تا صفر گذاشته، به این معنی که میتونی حتی تعداد عددهای ورودی رو هم مشخص کنی، موارد دیگر رو هم یه نگاهی بهش بنداز، به دردت میخوره، تازه اگه با Regular Expression آشنایی داشته باشی میتونی فرمول هم بهش بدی تا طبق اون فرمولت، ورودی های کاربر رو چک کنه.
موفق باشید

kiani.mehdi
پنج شنبه 07 تیر 1386, 20:06 عصر
خیلی خودتونو اذیت میکنید، از کنترل MaskedTextBox استفاده کن، و در قسمت property، روی گزینه ی Mask کلیک کن و در پنجره ی ظاهر شده، گزینه ی اول رو یعنی Numeric رو انتخاب کنید، در قسمت پایین همون پتجره هم میبینی 5 تا صفر گذاشته، به این معنی که میتونی حتی تعداد عددهای ورودی رو هم مشخص کنی، موارد دیگر رو هم یه نگاهی بهش بنداز، به دردت میخوره، تازه اگه با Regular Expression آشنایی داشته باشی میتونی فرمول هم بهش بدی تا طبق اون فرمولت، ورودی های کاربر رو چک کنه.
موفق باشید

ایشون میخواستن کد قبل را تبدیل کنند

در maskedTextBox ها فرمت مستقیمی برای متن ندارن
در مورد اعداد هم شما باید تعداد اونا را مشخص کنید و در ضمن توی تکسن باکس هم کاراکتر خاصی که در قسمت preview تعیین شده نمایش داده میشه
میشه بگین با استفاده از maskedTextBox ها چطور میشه فرمت عدد گذاشت (بدون کاراکتر های preview) و اینکه در طول محدودیت نداشته باشه ؟
همچنین برای فرمت های متنی
اگر منظورتون custom یا regular experssion ها هستند فکر نکنم اون ها هم کد کمتر از اینی که اینجا هست نیاز داشته باشن

محض اطلاع عرض کنم که تکست باکس ها خاصیتی دارن به نام MaxLenght که توضیحش واضحه

بعدش هم یه خط کد نوشتن فکر نکنم خیلی اذیت شدن داشته باشه


در ضمن به توضیحات کاربر آرژنگ در صفحه قبل هم یه نگاهی بنداز

موفق باشید
مهدی کیانی

kiani_behzad
سه شنبه 12 تیر 1386, 22:54 عصر
به نظر من بهترین راه استفاده از وراثت و محدود کردن تکس باکس است.

jafari_m246
جمعه 22 تیر 1386, 14:14 عصر
e.Handled = !(char.IsLetter(e.KeyChar) || char.IsControl(e.KeyChar));


اگر می شه یک کم در مورد کد بالا توضیح بدید که چطوری عمل می کنه
ممنون

gomnam
جمعه 22 تیر 1386, 16:58 عصر
اگر می شه یک کم در مورد کد بالا توضیح بدید که چطوری عمل می کنه
ممنون

دستور فوق به این شکل کار میکنه که اگه کااکتر ورودی جزء کاراکتر های حرف یا کاراکتر های کنترلی باشه اجازه ورود کاراکتر به تکست باکس داده میشه در غیر این صورت داده نمیشه

f.beigirad
شنبه 17 فروردین 1392, 15:43 عصر
با سلام.

میشه یه توضیح مختصری دراین باره بدین:


به نظر من بهترین راه استفاده از وراثت و محدود کردن تکس باکس است.