PDA

View Full Version : مبتدی: تعیین عددی بودن متن وارد شده در تکست باکس



mohammadian7
یک شنبه 15 خرداد 1390, 22:27 عصر
سلام
چه میشه فهمید که متن وارد شده در تکست باکس عددی است یعنی کارکترهای تکست باکس تماما عددی هستند.
من داخل فروم و گوگل سرچ کردم که تماما مربوط به متد keypress تکست باکس میشدند حال آنکه من میخواهم این عمل داخل متد textchanged انجام شود. و بعد از عددی بودن مقدار تکست باکس در db جستجو انجام شود.

zarrinnegar
یک شنبه 15 خرداد 1390, 22:57 عصر
بهترین راه اینه که یک کلاس بسازی بعد این کد ها رو توش بنویسی



public class WaterMarkBox : TextBox


{




public double Digit


{




get


{




double d = 0;




double.TryParse(Text, out d);




return d;


}




set


{


Text =

value.ToString();


}



}




بعدش rebuild کنی و بجای textbox از این textbox جدید استفاده کنی یک property جدید داره به اسم digit که همیشه توش عدده

توی هیچ جا هم نمی خواد چک کنی

mohammadian7
یک شنبه 15 خرداد 1390, 23:52 عصر
دوستان اگر راه کار دیگه ای هم بلدند لطف کنند اینجا بزارند.

B.I.O.H.A.Z.A.R.D
دوشنبه 16 خرداد 1390, 00:05 صبح
سلام

ببینید اینطوری به کارتون میاد:

int value;
private void textBox2_TextChanged(object sender, EventArgs e)
{
if ((textBox2.Text.Length > 0) &&
!(Int32.TryParse(textBox2.Text, out value)))
{
// Error to show
}
else
{
// Write Your Bank Queries in Here
}
}
و یه خواهش از جناب zarrinnegar (http://barnamenevis.org/member.php?31940-zarrinnegar) داشتم. اگه ممکنه بیشتر توضیح بدید، چون روش شما مطمئنا خیلی حرفه ای تره

B.I.O.H.A.Z.A.R.D
دوشنبه 16 خرداد 1390, 00:27 صبح
البته یه اشتباه کوچیک کردم.(با notepad نوشته بودم) تصحیح میکنم:

int value;
private void textBox2_TextChanged(object sender, EventArgs e)
{
if (textBox2.Text.Length > 0)
{
if (!(Int32.TryParse(textBox2.Text, out value)))
{
// Error to show
}
else
{
// Write bank queries in here
}
}
}

saman6384
دوشنبه 16 خرداد 1390, 00:27 صبح
اینطور که من فهمیدم
اگه
digit =0
باشه
ینی محتوای تکست باکس عدد نیست

اگرم تو تکست باکس عدد باشه که digit عدد رو بر می گردونه!

روش جالب انگیزیه
لایک دیس روش :لبخند:

zarrinnegar
دوشنبه 16 خرداد 1390, 00:30 صبح
خیلی ساده است
برای پروژه یک آیتم جدید انتخاب میکنید از نوع class
اسمش رو میزارید MytextBox

بعد داخل اون این کد ها رو مینویسید
public class MyTextBox : system.windows.forms.textbox
{
public double Digit
{
get
{
double d=0;
double.tryparse(text,out d);
}
set
{
text=value.tostring();
}
}
}
}



بعد فایل رو ذخیره میکنید بعد ReBuild
یک ابزار به ابزار های پروژه اضافه میشه
اون رو درگ میکنید توی فرم

میشه یک Textbox
که یک Property داره به نام Digit که هر وقت محتویات textbox عددی بود اتوماتیک میشه همون عدد
نیاز به تبدیل strtoint هم نداره

بعد توی event Textchanged میتونی بنویسی
If mytextbox1.digit > 0
{
دستورات
}

B.I.O.H.A.Z.A.R.D
دوشنبه 16 خرداد 1390, 00:36 صبح
تشکر میکنم از هر دو عزیز. saman6384 (http://barnamenevis.org/member.php?83156-saman6384) و zarrinnegar (http://barnamenevis.org/member.php?31940-zarrinnegar)

خیلی استفاده کردم. :تشویق:

haghft
دوشنبه 16 خرداد 1390, 09:21 صبح
از regex و یا IsNumeric از کلاس microsoft.visualbasic هم میتونی استفاده کنی.

saman6384
دوشنبه 16 خرداد 1390, 09:27 صبح
خیلی ساده است
برای پروژه یک آیتم جدید انتخاب میکنید از نوع class
اسمش رو میزارید MytextBox

بعد داخل اون این کد ها رو مینویسید
public class MyTextBox : system.windows.forms.textbox
{
public double Digit
{
get
{
double d=0;
double.tryparse(text,out d);
}
set
{
text=value.tostring();
}
}
}
}



بعد فایل رو ذخیره میکنید بعد ReBuild
یک ابزار به ابزار های پروژه اضافه میشه
اون رو درگ میکنید توی فرم

میشه یک Textbox
که یک Property داره به نام Digit که هر وقت محتویات textbox عددی بود اتوماتیک میشه همون عدد
نیاز به تبدیل strtoint هم نداره

بعد توی event Textchanged میتونی بنویسی
If mytextbox1.digit > 0
{
دستورات
}


فقط یچیزی به نظرم رسید الان!
اگه عددمون صفر باشه چی؟؟

از کجا بفهمیم تو این روش که عدد صفر بوده یا مقدار عددی نبوده؟

mohammadian7
دوشنبه 16 خرداد 1390, 15:04 عصر
من از روش آقای B.I.O.H.A.Z.A.R.D (http://barnamenevis.org/member.php?110603-B.I.O.H.A.Z.A.R.D) استفاده کردم و نتیجه لازم را گرفتم. ولی یک مشکل وجود دارد من میخواهم زمانی که کاربر مثلا بعد از 5 تا عدد یک حرف وارد کرد. بدون نمایش پیام فقط کاراکتر حرف وارد شده پاک شود و کرسر در اخر رشته قرار بگیرد.
int value;
private void textBox2_TextChanged(object sender, EventArgs e)
{
if ((textBox2.Text.Length > 0) &&
!(Int32.TryParse(textBox2.Text, out value)))
{
// Error to show
}
else
{
// Write Your Bank Queries in Here
}
}

B.I.O.H.A.Z.A.R.D
دوشنبه 16 خرداد 1390, 18:37 عصر
اونم اینطوری انجام میشه:

if (textBox2.Text.Length > 0)
{
if (!(Int32.TryParse(textBox2.Text, out value)))
{
SendKeys.SendWait("{BACKSPACE}");
}
else
{
// Write bank queries in here
}
}

gerdioz
دوشنبه 16 خرداد 1390, 22:08 عصر
سلام چه کاریه شما بیاید ورودی رو به عدد تبدیل کنید اگه خطا داد یعنی عدد نیست
try
{
int x=int.parse(txt1.text);
}
catch
messagebox.show("خطا داده عددی نمی بادش");
{
}
اط شما بعیده راحترشم اینه که از یک Masked استفاده کنید

B.I.O.H.A.Z.A.R.D
دوشنبه 16 خرداد 1390, 23:01 عصر
سلام چه کاریه شما بیاید ورودی رو به عدد تبدیل کنید اگه خطا داد یعنی عدد نیست
try
{
int x=int.parse(txt1.text);
}
catch
messagebox.show("خطا داده عددی نمی بادش");
{
}
اط شما بعیده راحترشم اینه که از یک Masked استفاده کنید

طرف صحبت شما منم؟ :لبخندساده:

lvlaziar
پنج شنبه 17 فروردین 1391, 16:13 عصر
دیدم تو این سال نویی همه یه کد گذاشتن! منم جوگیر شدم! :قهقهه:
از رویداد keypress تکست باکس هم میتونی استفاده کنی! ( البته خودت گفتی نمیخوای!! ولی به یه روش دیگه میزارم شاید کسی ندیده باشه!! :افسرده: )
به این صورت:
private void tm1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar < '0' || e.KeyChar > '9')//age add bod!
{
e.Handled = true;
}
else//age nabod :D
{
e.Handled = false;
}
}
راستی با رویداد keydown i هم میشه این کارو کرد!!
خوش باشید! :قلب:

sheytan69
جمعه 03 آذر 1391, 21:06 عصر
دوستان اين كد رو ببينيد


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

bool TextCheck = false;
bool KeyPressed = false;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (!KeyPressed)
{
if (!TextCheck)
{
TextCheck = true;
string Text = textBox1.Text;
textBox1.Text = "";
for (int i = 0; i < Text.Length; i++)
if (Convert.ToInt16(Text[i]) > 47 && Convert.ToInt16(Text[i]) < 58)
textBox1.Text += Text[i];
textBox1.Select(textBox1.TextLength, 0);
TextCheck = false;
}
KeyPressed = false;
}
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
KeyPressed = true;
e.Handled = Char.IsDigit(e.KeyChar) == false && Char.IsControl(e.KeyChar) == false;
if (!char.IsDigit(e.KeyChar) && ((int)e.KeyChar) != 8)
KeyPressed = false;

if (!(e.KeyChar >= '0' && e.KeyChar <= '9'))
e.Handled = true;
}
}

mousa1992
جمعه 03 آذر 1391, 21:17 عصر
سلام
مشکلی نداره میتونه نباشه
دوستی که این کد رو نوشتن رویداد keypress رو برای جلوگیری از ورود کارکتر های غیز عددی از طریق keyboard نوشتن و رویداد textchange رو برای جلوگیری از کپی کردن کارکتر های غیر عددی نوشتن که همون textchange کافیه(چون با فشردن هر کلید رویداد textchanfged هم اجرا میشه _ البته من متد رو بررسی نکردم دقیقا چیکار میکنه) و طبق گفته ی خدتون نباید نیازی به keypress باشه
موفق باشی