PDA

View Full Version : نحوه غیر فعال کردن رویدادی از داخل رویداد دیگر



amir_pro
جمعه 07 دی 1386, 01:13 صبح
سلام به دوستان
من کلاس زیر را نوشتم و خاصیتی برای اون گذاشتم به نام MaxValue که اگر کاربر متنی را که داخل textBox وارد می کند بیشتر ازاین مقدار بود جلوی وارد کردن گرفته شود.
کد کلاس در زیر آمده است.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace NumericTextBox
{
public class NumericTextBox : TextBox
{
public NumericTextBox()
{

}

public string MX_Value;
public string MaxValue
{
get
{
return MX_Value;
}
set
{
MX_Value = value;
}
}

protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
this.BackColor = Color.LemonChiffon;
this.SelectAll();
}

protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
this.BackColor = Color.White;
}

protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar)))
{
e.Handled = true;
}
}
}
}


و کد زیر را هم برای رویداد TextChanged مربوط به textbox قرار دادم.


if (numericTextBox1.Text != "")
{
if (Convert.ToInt32(numericTextBox1.Text) > Convert.ToInt32(numericTextBox1.MaxValue))
{
e.Handled = true;
}
else
{
e.Handled = false;
}
}

حالا میخوام اگر مقدار متن وارده بیشتر از مقدار خاصیت maxvalue بود جلوی وارد کردن گرفته بشه.
به نظر دوستان چیکار باید بکنم؟
آیا می شود کد کنترل کردن را داخل کلاس نوشت و از آنجا جلوی اجرا شدن رویدادی را گرفت؟

mohammad272005
جمعه 07 دی 1386, 01:49 صبح
به نظر من شما نباید تو TextChanged یا KeyPress و از این قبیل eventها، کاربر رو محدود کنید. برای این منظور event خاصی وجود داره به نام Validaing که البته چون شما میخواین داخل کنترل کد بنویسین، بهترین انتخاب OnValidating هست. به این ترتیب:

protectedoverridevoid OnValidating(CancelEventArgs e)
{
base.OnValidating(e);
if (e.Cancel)
return;
e.Cancel = Convert.ToInt32(this.Text) > Convert.ToInt32(MaxValue);
}

scorpion_man
جمعه 07 دی 1386, 12:35 عصر
با سلام به همه دوستان
من واقعیتش دلیل این کارارو نمیدونم TextBox یه Property استاندارد برا این کار داره که اسمش MaxLength هست که تعداد کاراکترها رو چک میکنه و امکان ورود کاراکتر بیش از اونرو نمیده اگه هم دارید یه کنترل جدید TextBox ایجاد میکنید یه ارث بری از همین کنترل بکنید و جاهایی که میخواهید تغییر بدید که این کار بهتره
موفق و پیروز باشید

Mahdi.Kiani
جمعه 07 دی 1386, 13:30 عصر
سلام به دوستان
من کلاس زیر را نوشتم .........

چرا maxvalue از نوع string هست؟

Mahdi.Kiani
جمعه 07 دی 1386, 13:32 عصر
با سلام به همه دوستان
من واقعیتش دلیل این کارارو نمیدونم TextBox یه Property استاندارد برا این کار داره که اسمش MaxLength هست که تعداد کاراکترها رو چک میکنه و امکان ورود کاراکتر بیش از اونرو نمیده اگه هم دارید یه کنترل جدید TextBox ایجاد میکنید یه ارث بری از همین کنترل بکنید و جاهایی که میخواهید تغییر بدید که این کار بهتره
موفق و پیروز باشید

اگه بخوایم توی textBox اعداد بیشتر از 120 تایپ نشن با این خاصیتی که گفتی .......

این خاصیت مربوط به طول رشته میشه و هیچ ربطی به موضوع مورد بحث نداره...

scorpion_man
شنبه 08 دی 1386, 15:07 عصر
اگه بخوایم توی textBox اعداد بیشتر از 120 تایپ نشن با این خاصیتی که گفتی .......

این خاصیت مربوط به طول رشته میشه و هیچ ربطی به موضوع مورد بحث نداره...

با سلام به همه دوستان
شرمنده بله در صورت چک کردن مقدار یک عبارت میشه از event onvlidating استفاده کرد که دوست عزیز بهش اشاره کردند

amir_pro
یک شنبه 09 دی 1386, 08:05 صبح
ممنون از دوستان
جناب night_fall2 برای این string گرفتم که مثل خاصیت text باشه و در صورت نیاز به int یا چیز دیگه ای تبدیل کنه