PDA

View Full Version : سوال: مشکل در رویداد TextChanged تکست باکس



unknown87s
دوشنبه 17 آبان 1389, 19:35 عصر
سلام دوستان
من به ی مشکلی بر خوردم
تو فرم 3 تا تکست باکس دارم، که هر وقت تو اولی عددی بنویسم بلافاصله با عدد تکست باکس دوم جمع بشه و بره تو تکست باکس سوم
تکست باکس دوم، مقدار ثابت داره.
از کد زیر استفاده می کنم




int num1, num2, sum;
public string zero = "0";

private void Number1Txt_TextChanged(object sender, EventArgs e)
{
if (salNumberTxt.Text != null)
{
num1 = Int32.Parse(Number1Txt.Text);
num2 = Int32.Parse(Number2Txt.Text);
sum = num1 + num2;
SumNumberTxt.Text = sum.ToString();
}
else
{
Number1Txt.Text = zero;
SumNumberTxt.Text= zero;
}
}

این کد درست کار می کنه ولی مشکلش اینه که هر وقت بعد از وارد کردن عدد تو تکست اولی بخوام پاکش کن و از نو بنویسمش از int32 خطا می گیره!
از شرط null بودن هم استفاده کردم ولی باز نمیشه!
چجوری باید این استثنا رو کنترل کنم؟

ایمان مدائنی
دوشنبه 17 آبان 1389, 19:41 عصر
شما ميتوني كاري كني كه تكس باكس فقط عدد قبول كنه و در صورت خالي بودن عدد صفر در آن قرار گيرد !
معمولا براي تكس باكسها عدد همين كار را انجام ميدهند كه وقتي خالي هست در اون 0 باشه
از Try و Catch استفاده كن كه در زمان وقوع خطا كار مناسب را انجام دهد مثلا 0 قرار دهد

Reza_Yarahmadi
دوشنبه 17 آبان 1389, 19:52 عصر
شرط رو بصورت زیر تغییر بدید درست میشه.

if (!String.IsNullOrEmpty(salNumberTxt.Text.Trim()))
{
num1 = Int32.Parse(Number1Txt.Text);
num2 = Int32.Parse(Number2Txt.Text);
sum = num1 + num2;
SumNumberTxt.Text = sum.ToString();
}
else
{
Number1Txt.Text = zero;
SumNumberTxt.Text = zero;
}

unknown87s
دوشنبه 17 آبان 1389, 22:30 عصر
شرط رو بصورت زیر تغییر بدید درست میشه.

if (!String.IsNullOrEmpty(salNumberTxt.Text.Trim()))
{
num1 = Int32.Parse(Number1Txt.Text);
num2 = Int32.Parse(Number2Txt.Text);
sum = num1 + num2;
SumNumberTxt.Text = sum.ToString();
}
else
{
Number1Txt.Text = zero;
SumNumberTxt.Text = zero;
}

کدی که گفتین، عالی جواب داد

فقط تو وارد کردن حروف همون مشکل قبلی رو داره، که اگه روش کار کنم،شاید بتونم رفعش کنم
در کل ممنونم، لطف کردین

bghad1
سه شنبه 18 آبان 1389, 00:59 صبح
دوست عزیز...بهتره که به این صورت عمل کنین چون مقدار عددی می خواین بگیرین:

()convert.ToInt32

چون
Int32.Parse(String Value)

معمولا اینجوری بهتره:چشمک:

bade saba
سه شنبه 18 آبان 1389, 11:04 صبح
کدی که گفتین، عالی جواب داد

فقط تو وارد کردن حروف همون مشکل قبلی رو داره، که اگه روش کار کنم،شاید بتونم رفعش کنم
در کل ممنونم، لطف کردین


شما برای رفع این مشکل دو تا راه حل داری اول اینکه اجازه ندی در تکس باکس به جز عدد وارد بشه که کدش اونقدر تو همین تالار مطرح شده که با یه سرچ کوچیک پیدا میکنی یا این که اون خط رو در try قرار بدی که در صورتی که به همچین مسئله ای بر خورد در قسمت catch بهش بگی چی کار بکنه

موفق باشید

user68
شنبه 04 دی 1389, 14:09 عصر
با سلام اگه بخوایم مقادیر یه سری text box رو تو دو تا ارایه بریزیم چی کار میشه کرد ؟ من از کد زیر استفاده کردم


int []x=new int[6] ;
int []y=new int[6] ;
for (int i = 0; i < 6; i++)
{
x[i] = Convert.ToInt32((textBox(i+1)).Text);
y[i] = Convert.ToInt32((textBox(i+2)).Text);
}

ولی این ارور رو میده
The name 'textBox' does not exist in the current context
چی کار باید بکنم ؟ مگه نمیشه یه سری text box رو به صورت ارایه ای مقدار دهی کرد؟

Reza_Yarahmadi
شنبه 04 دی 1389, 14:18 عصر
يك روش ميتونه بصورت زير باشه

int[] x = new int[6];
int[] y = new int[6];
for (int i = 0; i < 6; i++)
{
if (this.Controls.Find("textBox" + (i + 1)).Length > 0)
x[i] = Convert.ToInt32(this.Controls.Find("textBox" + (i + 1))[0].Text);
if (this.Controls.Find("textBox" + (i + 2)).Length > 0)
y[i] = Convert.ToInt32(this.Controls.Find("textBox" + (i + 2))[0].Text);
}

quantomquery
شنبه 04 دی 1389, 17:41 عصر
سلام دوستان
من به ی مشکلی بر خوردم
تو فرم 3 تا تکست باکس دارم، که هر وقت تو اولی عددی بنویسم بلافاصله با عدد تکست باکس دوم جمع بشه و بره تو تکست باکس سوم
تکست باکس دوم، مقدار ثابت داره.
از کد زیر استفاده می کنم




int num1, num2, sum;
public string zero = "0";

private void Number1Txt_TextChanged(object sender, EventArgs e)
{
if (salNumberTxt.Text != null)
{
num1 = Int32.Parse(Number1Txt.Text);
num2 = Int32.Parse(Number2Txt.Text);
sum = num1 + num2;
SumNumberTxt.Text = sum.ToString();
}
else
{
Number1Txt.Text = zero;
SumNumberTxt.Text= zero;
}
}

این کد درست کار می کنه ولی مشکلش اینه که هر وقت بعد از وارد کردن عدد تو تکست اولی بخوام پاکش کن و از نو بنویسمش از int32 خطا می گیره!
از شرط null بودن هم استفاده کردم ولی باز نمیشه!
چجوری باید این استثنا رو کنترل کنم؟


از tryparse استفاده کن :




privatevoid textBox1_TextChanged(object sender, EventArgs e)
{
Int32 myNum = 0;
int num1 = 0;
if (Int32.TryParse(textBox1.Text, out myNum))
{
num1 = int.Parse(textBox1.Text);
}
else
MessageBox.Show(" ");
int num2 = int.Parse(textBox2.Text);
textBox3.Text = (num1 + num2).ToString();
}



این طوری مشکلت حل می شه

موفق باشید

gerdioz
شنبه 04 دی 1389, 18:57 عصر
private void Number1Txt_TextChanged(object sender, EventArgs e)
{
try
{
if (salNumberTxt.Text != null)
{
num1 = Int32.Parse(Number1Txt.Text);
num2 = Int32.Parse(Number2Txt.Text);
sum = num1 + num2;
SumNumberTxt.Text = sum.ToString();
}
}
catch
{
Number1Txt.Text = zero;
SumNumberTxt.Text = zero;
}
}