PDA

View Full Version : حرفه ای: بهترین روش برای جمع زدن تعدادی textbox



angel20
شنبه 24 مهر 1395, 20:07 عصر
من تعدادی تکست باکس دارم که قراره قیمت کالاهای مختلف خریداری شده رو نشون بده! حالا میخوام توی یه تکست باکس قیمت نهایی نشون داده بشه
نمیخوام از یه دکمه برای محاسبه استفاده کنم میخوام بعد از تغییر قیمت هر تکست باکس جمع رو خودکار نشون بده
الان من بعد از هر تغییر تکست باکس کل تکست باکس های قیمت اولیه رو جمع میزنم ! این کار چند تا مشکل داره یکی این که باید یکی یکی تکست باکس ها تبدیل به عدد بشه و البته قبلش باید چک بشه که یه وقت خالی نباشه و بعد وقتی قیمت مثلا صدهزار تومن باشه واسه هر عدد جدا محاسبات رو انجام میده واسه همین صدهزار باید شش بار تمام مراحل محاسبات رو انجام بده که این جوری منابع سیستمی به باد فنا میره
کسی هست راهه جل مناسب تری داشته باشه!؟ توی رویداد leave هم نمیشه نوشت چون بیشتر قیمت های کالا به محض زدن نام کالا خودشون پر میشن!

mrprestige
شنبه 24 مهر 1395, 21:40 عصر
سلام دوست من وقتت بخیر ، اگه منظورت رو درست متوجه شده باشم شما میخوایید هر وقت عدد هاتون رو داخل تکست باکس هاتون نوشتید نتیجه داخل یه تباکس ثالث نمایش داده شه

داخل کلاس Form_Load اینو بنویسید

var TB = new[] { textBox1, textBox2, textBox3, textBox4 };
foreach (var tb in TB)
tb.TextChanged += (TB_TextChanged);

داخل Form این رو بنویسید

private void TB_TextChanged(object sender, EventArgs e)
{
var tb = sender as TextBox;
if (tb != null)
{
int value;
if (int.TryParse(tb.Text, out value))
{
if (textBox5.Text.Length > 0)
textBox5.Text = (int.Parse(textBox5.Text) + value).ToString();
else
textBox5.Text = value.ToString();
}
}
}





شما اعداد رو داخل textbox هاتون مینویسید و نتیجه بطور همزمان داخل TextBox5 نمایش داده میشه .

angel20
دوشنبه 26 مهر 1395, 21:18 عصر
سلام دوست من وقتت بخیر ، اگه منظورت رو درست متوجه شده باشم شما میخوایید هر وقت عدد هاتون رو داخل تکست باکس هاتون نوشتید نتیجه داخل یه تباکس ثالث نمایش داده شه

داخل کلاس Form_Load اینو بنویسید

var TB = new[] { textBox1, textBox2, textBox3, textBox4 };
foreach (var tb in TB)
tb.TextChanged += (TB_TextChanged);

داخل Form این رو بنویسید

private void TB_TextChanged(object sender, EventArgs e)
{
var tb = sender as TextBox;
if (tb != null)
{
int value;
if (int.TryParse(tb.Text, out value))
{
if (textBox5.Text.Length > 0)
textBox5.Text = (int.Parse(textBox5.Text) + value).ToString();
else
textBox5.Text = value.ToString();
}
}
}





شما اعداد رو داخل textbox هاتون مینویسید و نتیجه بطور همزمان داخل TextBox5 نمایش داده میشه .
مرسی دوست عزیز مسبت به چیزی که من نوشته بودم خیلی کامل تر بود ولی مشکل اینه که این هر عدد رو با عدد بعدی توی همون تکست باکس جمع میکنه و بعد جمعش رو توی تکست اخر ( همون تکست باکس 5 ) نمایش میده! بعد واسه هر عددی که وارد تکست باکس میشه چند خط درگیر میشه! راهی نیست که راحت تر بشه این کار رو انجام داد تا واسه هر عدد توی هر تکست باکس نخواد این راه رو بریم!؟

angel20
دوشنبه 26 مهر 1395, 21:19 عصر
فکر کنم یه دکمه بذارم واسه محاسبه بهتر باشه!؟

angel20
سه شنبه 27 مهر 1395, 13:01 عصر
این کد رو هم از تو اور فلو (http://stackoverflow.com/questions/19519452/how-to-add-multiple-textbox-numbers-and-store-the-sum-as-a-double-in-variable/19519569#19519569) پیدا کردم! به نظرم این بهتره! بازم دوستان نظره دیگه ای دارن لطف میکنن اگه با من در میون بذارن!



private void txtPrice2_TextChanged(object sender, EventArgs e)
{

txtall.Text =(radGroupBox1. Controls.OfType<TextBoxtest.TxtProNet>()
.Where(tb => tb.Name.StartsWith("txtprice2"))
.Select(tb => tb.Text)
.Where(s => !string.IsNullOrEmpty(s))
.Sum(s => { int i; return Int32.TryParse(s, out i) ? i : 0; }))
.ToString();
}


پ.ن : تو کد های بالا تکست باکسهایی رو میخواستم جمع بزنم که تو radgroupbox بودن ، textboxest.txtpronet هم تکست باکس های من بودن که از کلاس کامپوننتهای پرو نت انتخاب کرده بودم و همه شون با اسم txtprice2 شروع میشدن