Member 14023534 Ответов: 3

Как разбить строку в текстовом поле и добавить значения?


private void calctxt_KeyDown(object sender, KeyEventArgs e)
        {
            double Total;
            string[] numbers = calctxt.Text.Split('+');
            Total = 0;
            foreach(string value in numbers)
            {
                Total = Total + numbers(num)
            }


Как бы я заполнил эту строку, чтобы добавить все числа между знаками+?

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

private void calctxt_KeyDown(object sender, KeyEventArgs e)
        {
            double Total;
            string[] numbers = calctxt.Text.Split('+');
            Total = 0;
            foreach(string value in numbers)
            {
                Total = Total + numbers(num)
            }


Как бы я заполнил эту строку, чтобы добавить все числа между знаками+?

3 Ответов

Рейтинг:
4

kanangandhi

private void textBox1_KeyUp(object sender, KeyEventArgs e)
       {
           double Total;
           string[] numbers = textBox1.Text.Split('+');
           Total = 0;
           foreach (string value in numbers)
           {
               if (!string.IsNullOrEmpty(value))
               {
                   Total = Total + Convert.ToDouble(value);
               }
           }

           textBox2.Text = Total.ToString();
       }


Richard MacCutchan

Total = Total + Convert.ToDouble(value);
Что произойдет, если пользователь наберет "3 + a" ?

Member 14023534

Для этого у меня есть метод.

Richard MacCutchan

Я не вижу этого в приведенном выше коде.

Рейтинг:
1

Vincent Maverick Durano

Попробуйте что-нибудь вроде этого:

using System;
					
public class Program
{
	public static void Main()
	{
		Console.WriteLine(Compute());
	}
	
	private static string Compute(){
		string message = string.Empty;
		bool isValid = true;
			double result = 0;
		    string sampleText = "2+5+1+6+3+2+1";
		    string delimtedValue = "+";
		
		    if(sampleText.Contains(delimtedValue)){
				string[] numbers = sampleText.Split(delimtedValue.ToCharArray());
				double val;

				foreach(string num in numbers)
				{
					if (!double.TryParse(num, out val))
					{
						message ="Unable to compute. String has invalid numeric values";
						isValid = false;
						break;

					}

					result = result + val;
				}
			}
		    
		if(!isValid)
			return message;
		else
			return string.Format("The total sum is: {0}", result);
	}
}


Member 14023534

Как мне изменить свою форму на основную?
Я только получаю ошибки.

Vincent Maverick Durano

Основной метод предназначен для консольного типа приложения. Что вы можете сделать, так это просто вызвать метод Compute() в Вашем событии keydown TextBox.

Рейтинг:
1

OriginalGriff

Вам нужно преобразовать строки в числа внутри вашего цикла, используя двойной.Метод tryparse[^]

double val;
if (!double.TryParse(value, out val))
   {
   ... report problem to user ...
   return;
   }
Затем вы можете добавить их в общую сумму.


Member 14023534

Вот мой код, пожалуйста, покажите мне, Я новичок в этом и чувствую себя потерянным:

public partial class cardCalc : Form
    {
        
        public static string calcTextcopy;
        public cardCalc()
        {
            InitializeComponent();
        }
        public static string sendtext = "";
        private void calctxt_KeyDown(object sender, KeyEventArgs e)
        {
            double Total;
            string[] numbers = calctxt.Text.Split('+');
            Total = 0;
            foreach(string num in numbers)
            {
                Total = Total + numbers(num)
            }

            if (e.KeyCode == Keys.Enter)
            {
                if (calctxt.Text != "")
                {
                    sendtext = calctxt.Text;
                    CashUpForm frm = new CashUpForm();
                    frm.Show();
                    Application.Exit();
        
    }
                else
                {
                    Application.Exit();
                }
            }
            

        }
    }
}

Member 14023534

это дает мне ошибку в разделе "значение", но мой код просто выглядит неправильно:

 private void calctxt_KeyDown(object sender, KeyEventArgs e)
        {
            double value;
            string[] numbers = calctxt.Text.Split('+');
            double num;
            double val;
            value = 0;
            if (!double.TryParse(value, out val))
            {

                return;
            }

Atlapure Ambrish

где твоя петля??
Кроме того, вы присваиваете 0 значению, вместо этого оно должно быть присвоено элементу numbers в цикле, а затем проанализировано.

OriginalGriff

Когда я сказал "внутри вашей петли", почему вы предположили, что это означает "выбросьте петлю, она вам не нужна"?

Member 14023534

Это три функции свойств моего текстового поля:

private void cardsTotalbox_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.Add)
            {
                if (cardsTotalbox.Text != "")
                {
                    this.cardsTotalbox.Font = new Font("Microsoft Sans Serif", 12F);
                }
            }
            else if(e.KeyCode == Keys.Enter)
            {
                this.cardsTotalbox.Font = new Font("Microsoft Sans Serif", 9F);
                twoHundredrBox.Focus();
            }
        }

        public void onlynumwithsinglepoint(object sender, KeyPressEventArgs e)
        {
            if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == '.' || e.KeyChar == '+'))
            { e.Handled = true; }
            TextBox txtDecimal = sender as TextBox;
            
        }

        private void cardsTotalbox_KeyUp(object sender, KeyEventArgs e)
        {
            double Total;
            string[] numbers = cardsTotalbox.Text.Split('+');
            Total = 0;
            foreach (string value in numbers)
            {
                if (!string.IsNullOrEmpty(value))
                {
                    Total = Total + Convert.ToDouble(value);
                }
            }

            cardsTotalbox.Text = Total.ToString();
        }

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что если я нажимаю enter, чтобы активировать текстовое поле, оно сразу же имеет ноль, а затем, когда я добавляю значение и + другое значение, ноль изменяется на сумму двух значений, но я хотел бы, чтобы вся строка отображалась в текстовом поле со всеми знаками+, прежде чем он вычислит значение, а не каждый раз, когда я нажимаю знак+.

OriginalGriff

Так ты ничего не читал из того, что я сказал?
Есть ли смысл задавать вопросы, если вы игнорируете то, что вам говорят?