PDA

View Full Version : گرفتن مقدار از یک تکست باکس وقتی که ...



s_mostafa_h
دوشنبه 12 آذر 1386, 11:55 صبح
با سلام
خواستم با استفاده از property مقداری را از یک تکست باکس وقتی که تغییر می کنه را بگیرم ، در غیر این صورت مقدار پیش فرض را به ما نشون بده :



private int Number = 45;



public int GetNumber
{
get
{
return Number;
}
set
{
Number = value;
}
}

در رویداد button1 میخوام وقتی که مقدار TextBox1.Text تغییر می کنه را به ما نشون بده ، در غیر این صورت مقدار پیش فرض را به ما نشون بده :


private void textBox1_TextChanged(object sender, EventArgs e)
{
this.GetNumber = Convert.ToInt32(textBox1.Text);
}

و در رویداد button1 :

private void button1_Click(object sender, EventArgs e)
{
کـــــــد ؟
}
با تشکر از لطف دوستان

hassan razavi
دوشنبه 12 آذر 1386, 12:00 عصر
منظورتون از مقدار پیش فرض چیه؟ من منظورتون رو متوجه نمیشم.
در کد شما با هر تغییری در TextBox مقدار GetNumber تغییر میکنه و در واقع مقدار TextBox در GetNumber قرار میگیره.
حالا بعدش می خواهید وقتی Button کلیک میشه چه اتفاقی بیفته؟

s_mostafa_h
دوشنبه 12 آذر 1386, 13:01 عصر
ببین مقدار پیش فرض من همان عدد 45 است که در بالا نوشتم . این مقدار را می توانیم با یک MessageBox نشون بدیم . حال منظورم اینه اگر کاربر هیچ عددی را در داخل TextBox وارد نکرد ، یعنی هیچ تغییری در درون TextBox که مقداری نداره ، ایجاد نکنه ، مقدار پیش فرض یعنی عدد 45 را به ما نشون بده ، در غیر این صورت عددی را که کاربر وارد کرده را به ما نشون بده ( عدد را با یه MessageBox نشون بده هم کافی است ) . این کار را می خوام با این Property انجام بدم ( درون رویداد button)
با تشکر از لطف شما

s_mostafa_h
دوشنبه 12 آذر 1386, 13:53 عصر
آقای رضوی ، مشکل تا حدی حل شد ، ولی یه مشکل دیگه پیدا شد !
من توی رویداد:


private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(GetNumber.ToString());

}
نوشتم و لی وقتی مقدار داخل TextBox پاک می شود error با توجه به اینکه مقدار TextBox خالی شده ، نمی تواند آنرا به عدد تبدیل کنه یا فرمت درستی برای تبدیل نمی باشد ، را می ده .

hassan razavi
دوشنبه 12 آذر 1386, 14:16 عصر
رویداد تغییر متنت رو بصورت زیر تغییر بدید



private void textBox1_TextChanged(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBox1.Text))
this.GetNumber = 45;
else
this.GetNumber = Convert.ToInt32(textBox1.Text);
}

rohullah
دوشنبه 12 آذر 1386, 14:19 عصر
ببین این کارت رو راه نمیندازه:

private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
this.GetNumber = Convert.ToInt32(textBox1.Text);
}
catch (Exception)
{
this.GetNumber = 45;
}
}

rohullah
دوشنبه 12 آذر 1386, 14:21 عصر
آقای رضوی ببخشید که فضولی کردیم ها. وقتی جواب رو فرستادم دیدم شمام جواب دادین.

hassan razavi
دوشنبه 12 آذر 1386, 14:36 عصر
خواهش میکنم روح الله جان .هدف کمک کردنه من و شما نداره . موفق باشید

s_mostafa_h
دوشنبه 12 آذر 1386, 18:49 عصر
آقی رضوی ، دست شما درنکنه ، از لطف شما و پاسخ آقای روح ا... . حقیقتش من هر دو راه از قبل تست کردن و اتفاقا جواب هم میده ، هیچ مشکلی از این بابت نداریم ، ولی یه موضوعی که من کمی گیج شدم اینه خوب ، ما به متغیر Number در ابتدا عدد دادیم ، یعنی initialize کردیم ، چرا باید مجددا باید به اش عدد بدیم . این کار کمی ایراد داره ، درسته که وقتی مقدار تکست باکس تغییر می کنه ، این مقدار را داخل متغییر number قرار می ده ، منظورم این بود که نمی شه کاری کرد که مجددا به اش عدد ندیم یعنی یه جوری شبیه این :


private void textBox1_TextChanged(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBox1.Text))
this.GetNumber = Number;
else
this.GetNumber = Convert.ToInt32(textBox1.Text);
}

ممنون از راهنمایی تان

hassan razavi
دوشنبه 12 آذر 1386, 19:14 عصر
شما نمی تونید اینکار رو انجام بدید چونکه شما با هر تغییر در Textbox دارید مقدار Number رو تغییر میدید. میتونید اینکار رو بکنید



private int Number = 0;
public int GetNumber
{
get
{
return Number;
}
set
{
if(value==0)
Number =45;
else
Number = value;
}
}


و رویدادتون هم بدینصورت تغییر بدید



private void textBox1_TextChanged(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBox1.Text))
this.GetNumber = 0;
else
this.GetNumber = Convert.ToInt32(textBox1.Text);
}

s_mostafa_h
دوشنبه 12 آذر 1386, 19:24 عصر
به هر حال از راهنمایی شما بسیار ممنونم

اَرژنگ
سه شنبه 13 آذر 1386, 08:56 صبح
۱) استاندارد کد نویسی برایه پروپرتی استفاده از پیشوند m_ قبل از فیلد پرایوت است.
۲) نام پروپرتی Get ندارد، اینگونه تعریف در جاوا رایج است چونکه معادل پروپرتی سی‌شارپ را ندارند.
۳ـ استفاده از ۰ برایه پیدا کردن اینکه در تکست باکس چیزی وارد شده و یا نه درست نیست. به اینگونه اعداد که همینطوری در برنامه تعریف و استفاده میشوند اعداد سحر آمیز گفته
میشه (چونکه استفاده ازشان منطقی نیست!)
۴ـ از TryParse استفاده کردن کافی است:



string textbox1;
private const int m_defaultNumber = 45;
public int Number
{
get {
int result;
if (int.TryParse(textbox1.Text, result))
{
return result;
}
else return m_defaultNumber;
}
set {
textbox1.Text = value.ToString();
}
}


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