NotAComputerScienceStudent Ответов: 1

Я хочу сделать так, чтобы если человек дважды нажимает enter, он очищает текстовое поле и поле метки, а не добавляет к результирующему значению


Я хочу сделать так, чтобы если человек нажимает дважды или после нажатия какой-либо кнопки он это делает (textbox1.clear & labelbox1 = "";)

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Ccalculator
{
    public partial class Form1 : Form
    {
        Decimal ResultValue = 0;
        String operatorperformed = "";
        bool IsOperatorPerformed = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, EventArgs e)
        {
            if(textBox1.Text == "0"||IsOperatorPerformed)
            {
                textBox1.Clear();
            }

            Button button = (Button)sender;
            if (textBox1.Text == ".")
            {
                if (!textBox1.Text.Contains("."))
                {
                    textBox1.Text = textBox1.Text + button.Text;
                }
            }else
            textBox1.Text = textBox1.Text + button.Text;
        }

        private void buttonBackSpace_Click(object sender, EventArgs e)
        {
            int i = textBox1.Text.Length;
            textBox1.Text = textBox1.Text.Substring(0, i - 1);
        }

        private void Button_Operator(object sender, EventArgs e)
        {
            Button button = (Button)sender;
            if (ResultValue != 0)
            {
                buttonEqualsTo.PerformClick();
                operatorperformed = button.Text;
                label1.Text = ResultValue + " " +
                    operatorperformed;
                IsOperatorPerformed = true;
            }
            else
            {
                operatorperformed = button.Text;
                ResultValue = Decimal.Parse(textBox1.Text);
                label1.Text = ResultValue + " " + operatorperformed;
                IsOperatorPerformed = true;
            }
        }

        private void buttonEqualsTo_Click(object sender, EventArgs e)
        {
            switch (operatorperformed)
            {
                case "+":
                    textBox1.Text = (ResultValue + Decimal.Parse
                        (textBox1.Text)).ToString();
                    break;
                case "-":
                    textBox1.Text = (ResultValue - Decimal.Parse
                        (textBox1.Text)).ToString();
                    break;
                case "/":
                    textBox1.Text = (ResultValue / Decimal.Parse
                        (textBox1.Text)).ToString();
                    break;
                case "x":
                    textBox1.Text = (ResultValue * Decimal.Parse
                        (textBox1.Text)).ToString();
                    break;
            }
            ResultValue = Decimal.Parse(textBox1.Text);
            label1.Text = "";
        }

        private void buttonC_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            label1.Text = "";
        }

        private void butCE_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
        }
    }
}

Richard MacCutchan

Хорошо, это то, что вы хотите, чтобы произошло. В чем же проблема?

NotAComputerScienceStudent

Проблема в том, что нажатие равно ему умножает число снова и снова, когда я нажимаю равно, и если я нажимаю любую числовую кнопку, она просто добавляет к нему (50 становится 506), я хочу, чтобы он сбросился

Richard MacCutchan

Смотрите ответ OriginalGriff ниже.

1 Ответов

Рейтинг:
2

OriginalGriff

Это не сложно: создайте переменную уровня класса - bool - это нормально, - которая говорит "данные изменены".
При изменении любого текстового поля установите для него значение true, если содержимое всех текстовых полей не пусто..
Когда нажата клавиша ENTER, обработчик щелчка проверяет переменную и добавляет, если она установлена, и очищает, если нет.


NotAComputerScienceStudent

не могли бы вы привести пример или объяснить немного лучше, потому что я не понимаю, что вы только что сказали(Да, я нуб).
Как будто я делаю стандартный калькулятор windows 10 и покончил со всем, кроме этого

OriginalGriff

Да ладно тебе! Даже будучи "нубом", вы должны это понимать. Даже разработчики VB могут это сделать...
Я дам вам одну строчку кода, чтобы вы могли начать.

private bool dataModified = false;
Теперь, как вы узнаете, изменилось ли текстовое поле?

NotAComputerScienceStudent

Я знаю это как я должен узнать изменилось ли текстовое поле

OriginalGriff

Как вы думаете?
Подсказка: какие события поддерживает текстовое поле? Одно из названий может быть действительно полезный...

NotAComputerScienceStudent

свойство textChanged в событиях

NotAComputerScienceStudent

Так что я решил проблему ввода теперь собираюсь сделать другую кнопку

NotAComputerScienceStudent

Нашел как это сделать спасибо за помощь

OriginalGriff

Всегда пожалуйста!

Приятно делать это самому, не так ли? :)

Кстати: вам нужно выучить правильные термины - или некоторые люди вообще откажутся вам помогать - TextChanged-это событие, а не свойство: последние-это методы getter и setter, которые выглядят следующим образом:

public int MyProperty { get; set; }

или
public int MyProperty
   {
   get { return _MyProperty; }
   set { _MyProperty = value; }
   }


Но молодец! :большой палец вверх: