Top.Mail.Ru
Ответы

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

По дате
По Рейтингу
Аватар пользователя
Новичок
4мес

Давай нормальные имена своим элементам управления. Сам же запутаешься потом со своими button25, и читать муторно. Ты работаешь со строкой. Любой новичок в программировании твоего уровня начнёт препарировать эту строку по типу, если в конце стоит + или -, то при помощи Substring убери последний символ и добавь другой. Но если делать по уму, то за всем этим должна быть какая-то модель (а не просто строка). При помощи этой модели можно как менять какие-то операторы, так и считать конечный результат. Но это уже не уровень новичка. И на твоём месте я бы пока занялся изучением основ.

Аватар пользователя
Искусственный Интеллект
4мес

>без setOperation, try, catch (FormatException), switch (option), case, break, default, return
Так дела не делаются.
Сделай калькулятор в виде отдельного класса, отделив его от презентации.
Затем сделай собственно презентацию.
И у тебя все ВНЕЗАПНО получится само собой.

Аватар пользователя
Мудрец
4мес

Это как раз таки не моя задача, а твоя. Ты же программу пишешь.
И чем тебе выше ответ не понравился ?

Аватар пользователя
Искусственный Интеллект
4мес
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
 
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; 
    } 
}