Windows Form C#.
Проблема за проблемой. Делаю калькулятор, но использую самые базовые и простейшие команды, т.к. на любимой учёбе мы не проходили это. Беру пример со встроенного в Windows 10 калькулятор. Когда запускаешь (и не только запускаешь, например стираешь) калькулятор появляется 0 в строке, правильно. Этот ноль у меня есть, всё работает. Но стоит мне нажать на минус, плюс, умножение и деление на моём калькуляторе, они не появляются вообще. Ваша задача: сделать так, чтобы они появились справа от нуля. То есть, я нажимаю на минус появляется минус, нажимаю на плюс и минус должен замениться на плюс. Нажимаю на умножение и плюс должен замениться на умножение, понимаете логику? И желательно с объяснениями. Соответственно, все математические операции на этих кнопках тоже должны работать. Вот код:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "0")
{
textBox1.Text = "";
}
if (textBox1.Text == "00")
{
textBox1.Text = "";
}
textBox1.Text += (sender as Button).Text; // Обращение к тексту кнопки
}
int m;
int minus;
int umnoz;
int delenie;
int operation;
private void button18_Click(object sender, EventArgs e)
{
m = Convert.ToInt32(textBox1.Text); // Запомнили число
textBox1.Text += "+"; //
operation = '+';
}
private void button17_Click(object sender, EventArgs e)
{
umnoz = Convert.ToInt32(textBox1.Text); // Запомнили число
textBox1.Text += "*"; //
operation = '*';
}
private void button19_Click(object sender, EventArgs e)
{
minus = Convert.ToInt32(textBox1.Text); // Запомнили число
textBox1.Text += "-"; //
operation = '-';
}
private void button13_Click(object sender, EventArgs e)
{
delenie = Convert.ToInt32(textBox1.Text); // Запомнили число
textBox1.Text += "/"; //
operation = '/';
}
private void button16_Click(object sender, EventArgs e)
{
if (operation == '+')
{
textBox1.Text = (m + Convert.ToInt32(textBox1.Text)).ToString();
}
if (operation == '-')
{
textBox1.Text = (minus - Convert.ToInt32(textBox1.Text)).ToString();
}
if (operation == 'x')
{
textBox1.Text = (umnoz * Convert.ToInt32(textBox1.Text)).ToString();
}
if (operation == '/')
{
textBox1.Text = (delenie / Convert.ToInt32(textBox1.Text)).ToString();
}
}
без setOperation, try, catch (FormatException), switch (option), case, break, default, return
Давай нормальные имена своим элементам управления. Сам же запутаешься потом со своими button25, и читать муторно. Ты работаешь со строкой. Любой новичок в программировании твоего уровня начнёт препарировать эту строку по типу, если в конце стоит + или -, то при помощи Substring убери последний символ и добавь другой. Но если делать по уму, то за всем этим должна быть какая-то модель (а не просто строка). При помощи этой модели можно как менять какие-то операторы, так и считать конечный результат. Но это уже не уровень новичка. И на твоём месте я бы пока занялся изучением основ.
>без setOperation, try, catch (FormatException), switch (option), case, break, default, return
Так дела не делаются.
Сделай калькулятор в виде отдельного класса, отделив его от презентации.
Затем сделай собственно презентацию.
И у тебя все ВНЕЗАПНО получится само собой.
Это как раз таки не моя задача, а твоя. Ты же программу пишешь.
И чем тебе выше ответ не понравился ?
public partial class Form1 : Form
{
private double currentNumber = 0; // Текущее число
private char currentOperation = ' '; // Текущая операция
private bool isNewNumber = true; // Флаг для определения нового ввода
public Form1()
{
InitializeComponent();
textBox1.Text = "0"; // Устанавливаем начальный ноль
}
private void button1_Click(object sender, EventArgs e)
{
if (isNewNumber)
{
textBox1.Text = "";
isNewNumber = false;
}
textBox1.Text += (sender as Button).Text;
}
// Общий метод для всех операций
private void OperationClick(char operation)
{
currentNumber = Convert.ToDouble(textBox1.Text); // Сохраняем текущее число
currentOperation = operation; // Сохраняем операцию
textBox1.Text = currentNumber.ToString() + " " + operation; // Показываем число и знак операции
isNewNumber = true; // Следующий ввод будет новым числом
}
private void button18_Click(object sender, EventArgs e) // Плюс
{
OperationClick('+');
}
private void button17_Click(object sender, EventArgs e) // Умножение
{
OperationClick('×');
}
private void button19_Click(object sender, EventArgs e) // Минус
{
OperationClick('-');
}
private void button13_Click(object sender, EventArgs e) // Деление
{
OperationClick('÷');
}
private void button16_Click(object sender, EventArgs e) // Равно
{
double secondNumber = Convert.ToDouble(textBox1.Text);
double result = 0;
switch (currentOperation)
{
case '+':
result = currentNumber + secondNumber;
break;
case '-':
result = currentNumber - secondNumber;
break;
case '×':
result = currentNumber * secondNumber;
break;
case '÷':
if (secondNumber != 0)
result = currentNumber / secondNumber;
else
textBox1.Text = "Ошибка";
break;
}
textBox1.Text = result.ToString();
isNewNumber = true;
}
}