ماشین حساب پیشرفته کد ماشین حساب در سی شارپ
لیست فهرست ها
ماشین حساب c# پیشرفته
ماشین حساب ساده با قابلیت عملکرد چند عدد پشت هم مشابه ویندوز و نمایش محاسبات پشت سر هم
برای ساخت این ماشین حساب از ویژوال استادیو 2017 استفاده شده است و نت فرم ورک 4.6 اگه اشتباه نکرده باشیم بعد از ساخت دیزاین برای ساخت دستور کلیک کافیه دوبار بری دکمه یا button کلیک کنید تا رویداد کلیک آن ساخته شود به زودی اموزش های دیگر نیز ساخته می شود هم چنین اموزش های ودئویی
فایل کامل در گیت هاب
نمونه ای از کد کلیک
private void btnNum1_Click(object sender, EventArgs e)
{
addition(lbltxt.Text, btnNum1.Text);
}
addition یک فانکشن برای کم کردن کد ها می باشد
در پایین کد های این تابع را می بینید
نمایش در نمایش گراصلی
private void addition(string init1 , string init2)
{
if (init1 == "0" && init2 != "." || ejraAmalgar == "ok")
{
lbltxt.Text = init2;
}
else if (init1 == "0" && init2 == ".")
{
lbltxt.Text = "0" + init2;
}
else
{
lbltxt.Text = init1 + init2;
}
ejraAmalgar = "no";
checkAmalgarChenge = true;
}
شرط اول : چک می کند اگر ورودی صفر و ممیز نبود یا دکمه مساوی زده بودید مقدار جدید فقط تایپ شود
شرط دوم : اگر مقدار صفر و کلید ممیز زده شد صفر و ممیز چاپ شود
شرط سوم : اگه این ها نبود دو عدد به هم بچسبند مثلا 23
عملیات مرتبط با دکمه مساوی
private void btnMosavi_Click(object sender, EventArgs e)
{
funcShowProgram("=", Convert.ToDouble(lbltxt.Text));
if(check == "+")
{
lbltxt.Text = "" + (inputSum + Convert.ToDouble(lbltxt.Text));
}
else if(check == "*"){
lbltxt.Text = "" + (inputSum * Convert.ToDouble(lbltxt.Text));
}
else if (check == "/")
{
lbltxt.Text = "" + (inputSum / Convert.ToDouble(lbltxt.Text));
}
else if (check == "-")
{
lbltxt.Text = "" + (inputSum - Convert.ToDouble(lbltxt.Text));
}
inputsOld = Convert.ToDouble(lbltxt.Text);
checkAmalgarChenge = true;
inputSum = 0;
}
این فانکشن تغریبا مشخص هست برای تبدیل مقدار عددی به رشته از “” + استفاده شده
برای تبدیل مقدار رشته یا string از Convert.ToDouble استفاده شده است
inputsOld برای مقادیر قبلی یعنی 2+4 = 6 که مقدار 6 درون این متغییر ذخیره می شود استفاده شده
checkAmalgarChenge یک متغییر بولین و برای چک کردن این که ایا دکمه های عملگر تغییر کرده یا خیر به عنوان مثال (+ = – * /) اگر مثلا اول + بزنید بعد نظرتون عوض بشه و – را بزنید عملیات مربوط به + کار نمی کند
inputSum مقدار عملیات دور شته مثال جمع را در خود نگه می دارد
عبارت پایین یکی از عملگر ها را نشان میدهد و بقیه عملگر ها نیز به همین صورت می باشد
عملیات مربوط به عملگر
private void btnPlus_Click(object sender, EventArgs e)
{
if (checkAmalgarChenge == true)
{
mohasebe("+");
}
funcShowProgram("+", inputsOld);
check = "+";
}
در صورتی که عملگر برابر با صحیح بود محاصبه انجام می شود
بعد از انجام محاصبه اطلاعات به funcShowProgram ارسال می شود تا در صفحه نمایش داده شود
check عملگر چک مشخص می کند که عملیات حاظر چه چیزی هست
در پایین به علیات مر بوت به نمایش محاسبات می رسیم به طور مثلا 2+3+2=
نمایش اطلاعت نمایشگر دوم
private void funcShowProgram(string amalgar,double inputsOlds)
{
ejraAmalgar = "ok";
if (oldProgram.Text.Contains("=")) {
oldProgram.Text = "";
}
if(oldProgram.Text == "")
{
oldProgram.Text = inputsOld + " " + amalgar;
}
else if(checkAmalgarChenge == false)
{
oldProgram.Text = oldProgram.Text.Substring(0, oldProgram.Text.Length - 2);
oldProgram.Text = oldProgram.Text + " " + amalgar;
}
else
{
oldProgram.Text = oldProgram.Text + " " + inputsOlds + " " + amalgar ;
}
checkAmalgarChenge = false;
}
ejraAmalgar یعنی یکی از کلید های (+ = – * / ) کلیک شده است
شرط اول : اگر دکمه مساوی داخل محاصبات یافت شد اطلاعات نمایش گر پاک شود
Contains یک جستجو کننده می باشد
شرط دوم : اگر هیچ عبارتی در قسمت بالایی نمایشگر نبود مقدار وارد شده را با عملگر ها نمایش بده
در غیر این صورت اگر عملگر برابر با مقدار false بود یعنی اول دکمه – و بعد دکمه + زده شد بیا اخرین مقدار که – بود را پاک کن و + را ضافه کن
و در غیر این صورت مقدار قبلی نمایش داده شده را با مقدار جدید جمع و نمایش بده مثلا 25 + 3
در هر صورت در اخر تغییر عملگر را مساوی با false قرار بده چون مطمعن هستیم تغییر عملگر تمام شده
خلاصه متغییر محاصبه
private void mohasebe(string avalcheck)
{
inputsOld = Convert.ToDouble(lbltxt.Text);
if(check == "") { check = avalcheck; }
if (check == "+")
{
if (inputSum == 0)
{
lbltxt.Text = "" + (inputsOld);
inputSum = Convert.ToDouble(lbltxt.Text);
}
else
{
lbltxt.Text = "" + (inputSum + Convert.ToDouble(lbltxt.Text));
inputSum = Convert.ToDouble(lbltxt.Text);
}
}
در بالا تر ما دستور محاصبه را صدا کردیم اینجا بیشتر توضیح خواهیم داد
inputsOld نگه دانده مقدار قبل از دمه های عملگر می باشد (+ – * / … )
شرط اول : بررسی می کند اگه چک خالی فرستاده شد دستور ازسالی بخواند
mohasebe(“+”);
شرط دوم : چک می کند کدام عملگر انجام شده است
شرط سوم داخل شرط دوم چک می کند اگر هیچ جمعی در قبل صورت نگرفته در نمایش گر اصلی مقدار عدد را نشان بده و در مقدار جمع ذخیره کن
در غیر این صورت مقدار قبلی را با مقدار جدید جمع کن به صورت مثال
مقدا جدید 2
مقدار قدیم 5+1
که می شود 8
پاک کردن اطلاعات
private void btnClr_Click(object sender, EventArgs e)
{
oldProgram.Text = "";
inputsOld = 0;
inputSum = 0;
lbltxt.Text = "0";
}
در بالا تمامی مقدار ها را پاک می کنیم
نمایش یک مسیج باکس
private void btnSave_Click(object sender, EventArgs e)
{
MessageBox.Show("Not Work");
}
به طور مثال ما در ماشین حساب دکمه سیو را کد نویسی نکرده ایم می توانیم از این دستور استفاده نماییم
MessageBox.Show
اگر نیاز به استفاده از دکمه های کیبرد در ماشین حساب داشتید می تواند از کد زیر استفاده نمایید
استفاده از کیبرد ویندوز
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Console.WriteLine(keyData);
if (keyData == (Keys.NumPad1))
{
btnNum1.PerformClick();
animation(btnNum1);
return true;
Console.WriteLine این مقدار در کنسور ویژوال استادیو مقداری که نیاز داریم را چاپ می کنید برای دیباگ بهترن راه است
keyData دکمه هایی که زده شده را مشخص می کند
PerformClick دستور صدا کردن کلیک مورد نظر می باشد
animation یک فانکشن برای تغییر رنگ استفاده شده است
فانکشن تغییر رنگ
private void animation(Button btn)
{
Color save = btn.BackColor;
btn.BackColor = Color.BlueViolet;
Task.Delay(300).Wait();
btn.BackColor = save;
}
Task.Delay باعث تغییر انداختن در شرط ما می شود
دانلود پروژه
دانلود فایل دانلود فایل آموزش پروژه ماشین حساب C# پیشرفته این پروژه