PDA

View Full Version : مشکل در تایپ صفر در تکست باکس ماشین حساب با کیبرد



mehrdad_dgmax
یک شنبه 31 اردیبهشت 1391, 16:39 عصر
سلام
دوستان ببخشید تاپیک جداگانه ای باز کردم چون بخش سوال جواب سی شارپو پیدا نکردم
من یه ماشین حساب مهندسی نوشتم که همه کاراش درست انجام میشه به غیر از دو تا مشکل.
یک اینکه من تو 4 عمل اصلی برای بار دوم که مساوی رو میزنم یه جواب بخود از خودش میده
مثلا اگر 40/10 بشه بار اول جواب درست که 4 هست رو میده و برای بار دوم که بدون انجام عمل خاصی مساوی رو میزنم به جای اینکه 4/10 کنه و جواب 0.4 رو نمایش بده میره عدد 10 رو نمایش میده در ضمن من برای این کار 3 تا متغیر تعریف کردم. ولی هرکاری کردم متاسفانه نتونستم درستش کنم
مشکل دوم هم اینه که توی تکستباکس با کلیدهای خود ماشین حساب صفرو رو کاری کردم که اول تایپ نمیکنه منتهی با کلیدهای کیبرد این قانونو رعایت نمیکنه و تاپیپ میکنه چیزی هم به ذهنم نمیرسه
ممنون میشم دوستان اگه کسی به ذهنش چیزی میرسه بهم کمک کنه.
مهرداد

arash ghafori
یک شنبه 31 اردیبهشت 1391, 16:57 عصر
سر مشکل اولت :من نمیدونم از چه کدی استفاده کردی، اما به نظر من یه کاری میتونی بکنی اونم اینه که یه Break Point کنار کدِ تقسیمت بزاری بعد ببینی و خط به خط چک کنی که دفه ی دوم چرا مقدار اشتباه میده .

mehrdad_dgmax
یک شنبه 31 اردیبهشت 1391, 17:07 عصر
ممنون ارش جان من سورسهای زیادی از نت گرفتم که همه ماشین حسابا این مشکلو داشتن هیچ کدومشون هم توجه نکرده بودن
کدی هم که برای دکمه تقسیم و مساوی نوشتمو باتو میزارم که ببینین.

if (txtShow.Text != "0" || txtShow.Text != "1")
{ x = System.Convert.ToDouble(txtShow.Text);
op = '/'; txtShow.Clear(); }



برای دکمه مساوی که عملیات تقسیمو انجام میده و کار تمو میشه اینه

y = System.Convert.ToDouble(txtShow.Text);
if (op == '/') { z = x / y; txtShow.Text = z.ToString(); }

فرید نجفلو
یک شنبه 31 اردیبهشت 1391, 17:32 عصر
سلام
دوست عزیز شما بعد از زدن = اگه عملیات انجام بشه نتیجه تو تکست باکس نشون داده می شه
خوب تا اینجا مشکلی نیست ولی بعد از اینکه نتیجه رو نمایش دادین باید مقدار op رو خالی کنید چون اون عملگر کارش رو انجام داده وتموم هست
و در کد دکمه = هم شرط بذارید که اگه op خالی بود کاری انجام نده

mehrdad_dgmax
یک شنبه 31 اردیبهشت 1391, 18:24 عصر
ممتون فرید جان منتهی من میخوام کاری انجام بده بعنی ادامه تقسیمو انجام بده یعنیبا فشردن دوباره کلید مساوی اون عددی که به عنوان جواب نمایش داده شده رو به عددی که تقسیم قبلی روش انجام شده بود تقسیم کنه واین عمل تا زمانی که کلید مساوی زده میشه هی تکرار بشه.
اگه روی ماشین حساب ویندوز امتحان کنین منظورمو متوجه میشین.

tooraj_azizi_1035
یک شنبه 31 اردیبهشت 1391, 20:27 عصر
سلام
سه متغیر A , B , Op بعد از انجام این عمل توسط کاربر و فشار دادن = حاوی این مقادیر هستند:
40/10=4
Op='/'
A=4 (نتیجه)
B=10

کاربر دوباره مساوی رو فشار میده:
دوباره A رو بر B تقسیم کرده و در تکست باکس نمایش میدهیم. اینبار A حاوی نتیجه 4/10 یعنی 0.4 است. دوباره A=0.4 می شه (یعنی همیشه آخرین نتیجه در A هست) B ثابت است (10) Op هم آخرین عملگر قبل از = رو در خودش داره (/).

در مورد صفحه کلید و اعداد:

private void textBox1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar);
}

باید بعد از عبارت IsDigit کلید هایی مثل Del و BackSpace و . رو استثنا در نظر بگیری و به کد بالا اضافه کنی.

mehrdad_dgmax
یک شنبه 31 اردیبهشت 1391, 22:33 عصر
سلام
سه متغیر A , B , Op بعد از انجام این عمل توسط کاربر و فشار دادن = حاوی این مقادیر هستند:
40/10=4
Op='/'
A=4 (نتیجه)
B=10

کاربر دوباره مساوی رو فشار میده:
دوباره A رو بر B تقسیم کرده و در تکست باکس نمایش میدهیم. اینبار A حاوی نتیجه 4/10 یعنی 0.4 است. دوباره A=0.4 می شه (یعنی همیشه آخرین نتیجه در A هست) B ثابت است (10) Op هم آخرین عملگر قبل از = رو در خودش داره (/).

در مورد صفحه کلید و اعداد:

private void textBox1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar);
}

باید بعد از عبارت IsDigit کلید هایی مثل Del و BackSpace و . رو استثنا در نظر بگیری و به کد بالا اضافه کنی.
ممنون تورج جان با کلی زحمت تونستم مشکل عملیات ریاضی رو حا کنم برای هر عمل یه تابع تعریف کردم و براش شرط گذاشتم که با شرط تونستم حل کنم و الان بدون مشکل کار میکنه
متهی مشکل صفحه کلیدو دارم یعنی کاری کردم که به غیر عدد و دکمه های لازم چیز دیگه ای رو قبول نمیکنه و البته ممیز ولی مشکل اینکه اعدادو به ترتیب نمیزنه یعنی صفر هم اول میزنه مثل عدد زیر
0000011125
که این خودش مشکله بزرگیه البته فقط با کیبرد اینجوریه و با دکمه های خود ماشین حساب درست کار میکنه

tooraj_azizi_1035
دوشنبه 01 خرداد 1391, 13:02 عصر
ممنون تورج جان با کلی زحمت تونستم مشکل عملیات ریاضی رو حا کنم برای هر عمل یه تابع تعریف کردم و براش شرط گذاشتم که با شرط تونستم حل کنم و الان بدون مشکل کار میکنه
متهی مشکل صفحه کلیدو دارم یعنی کاری کردم که به غیر عدد و دکمه های لازم چیز دیگه ای رو قبول نمیکنه و البته ممیز ولی مشکل اینکه اعدادو به ترتیب نمیزنه یعنی صفر هم اول میزنه مثل عدد زیر
0000011125
که این خودش مشکله بزرگیه البته فقط با کیبرد اینجوریه و با دکمه های خود ماشین حساب درست کار میکنه

باید 0 رو استثنا قرار بدی و زمانی که مقدار TextBox برابر 0 است دیگه 0 رو قبول نکنی البته اگه کاربر . (Dot) زده باشه باید همچنان به گرفته 0 ادامه بده چون می خواد عدد اعشاری وارد کنه:


private void textBox1_KeyDown(object sender, KeyEventArgs e)
{

if (e.Key == Key.D0)


{
e.Handled = false;
}
}


شرط بالا رو طوری تغییر بده که مقدار جاری صفر است و همچنین کاربر . رو فشار نداده :

textBox1.Text.Contains('.')==false
امیدوارم منظورم روشن بوده باشه.

mehrdad_dgmax
دوشنبه 01 خرداد 1391, 13:54 عصر
مرسی تورج جان من مشکلم با عدد صفر هم حل شد خداروشکر یعنی الان درست کار میکنه توی textchanged یه شرط گذاشتم که اگر عدد با 0 شروع شد صفر رو ریموو کنه و البته قبلا اینم استثنا گذاشتم که اگه با .0 شروع شد برای اعشاری چیزی رو پاک نکنه و الان درست کار میکنه ولی من یه مشکل دیگه هم پیدا کردم اونم اینه که من با کلید ممیز یا همون نقطه روی کیبرد نمیتونم کاری کنم که اگه تکست باکس خالی بود و ممیز فشار داده شد اتوماتیک (.0) رو نمایش بده به جای (.) در حای که این کارو با دکمه خود ماشین حساب انجام دادم ولی همون دستورو برای کلید کیبرد میزارم (.0.) رو نمایش میده هر کاری هم کردم نشد
اینم بتونی راهنمایی کنی ممنون میشم