пожалуйста, исправьте мой код, он просто не работает, калькулятор миль на галлон

#c# #forms #textbox

#c# #формы #текстовое поле

Вопрос:

вот код, пожалуйста, помогите. Он не работает. Мне обещали, что так и будет. Я не могу преобразовать строку текстового поля в int, поэтому я не могу выполнить требуемую математику.

         public Form1()
        {
            InitializeComponent();
        }

        int userVal = int.Parse(Form1.textBox1.Text);
        private void button1_Click(object sender, EventArgs e)
        {
            int answer = (Form1.textBox1 * Form1.textBox2);
            MessageBox.Show("MPG: ", answer);
        }
  

Комментарии:

1. Вы не используете userVal

2. Попробуйте использовать int. Попробуйте проанализировать вместо int.Parse. Конечно, это не единственная проблема с этим кодом.

3. 1) int userVal = int.Parse(Form1.textBox1.Text); вы не можете запустить этот код вне метода или конструктора. 2) почему da hack у вас textBox1 статичный? если это не так, то удалите Form1 ! 3) Its not working. это худшее описание проблемы, которое вы можете дать! У вас есть ошибки компиляции? ошибки во время выполнения? исключения? расскажите нам больше….

Ответ №1:

Прежде всего. Вам действительно следует начать с основ, потому что в вашем коде вы пытаетесь умножить два TextBox элемента управления, что невозможно.

Во-вторых. Я исправил ваш код.

Int32.TryParse(someString,out anInt) пытается преобразовать первый параметр (someString) в Int32 и возвращает логическое значение о преобразовании, было ли оно успешным или нет. Если преобразование прошло успешно, преобразованное значение сохраняется во втором параметре (anInt) и Int32.TryParse(someString,out anInt) возвращает true значение.

В исправленном коде вы просто пытаетесь преобразовать string s из обоих TextBox файлов. Если вы смогли это сделать (вернуть значение Int32.TryParse ), просто умножьте оба int значения, полученные из Int32.TryParse

 public Form1()
{
    InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
    int num1,num2;
    If(Int32.TryParse(textBox1.Text,out num1) amp;amp; Int32.TryParse(textBox2.Text,out num2))
    {
        int answer = num1 * num2;
        string output = "MPG: "  answer.ToString();
        MessageBox.Show(output);
    }

}
  

Комментарии:

1. @MongZhu спасибо за ваш отзыв. Отредактировал мой ответ еще раз, объясняя, как работает код.

Ответ №2:

 int userVal = int.Parse(Form1.textBox1.Text);
  

Прежде всего, эта строка должна быть помещена в функцию button1_Click, чтобы она работала. Но теперь проблема в том, что вы используете строковый ввод для приема чисел, что не очень хорошая идея, потому что, если вы наберете, например, «abc», int.Parse выдаст исключение.

Теперь вам просто нужно заменить TextBox1 и 2 на числовые входные данные, а затем использовать этот код:

 public Form1()
{
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
    int answer = (numericalInput1.value * numbericalInput2.value);
    MessageBox.Show("MPG: ", answer);
}
  

Комментарии:

1. Это приведет к сбою в любом случае. Что такое Form1? Это имя класса, а в C # у нас нет экземпляров автоматической формы. Вам нужен экземпляр Form1. Во-вторых, каково содержимое двух текстовых полей. Int.Parse завершится ошибкой, если содержимое не преобразуется в целые числа. Например, пустая строка

2. 1. Он просто не включил общедоступный частичный класс Form1 : Form. Также он, вероятно, использует редактор VisualStudio Form WYSIWYG, который обрабатывает экземпляр формы. 2. Я согласен, он должен использовать числовой ввод, название которого я забыл, NumericUpDownVal или что-то в этом роде.

3. @Laurent Если вы хотите получить доступ к элементу внутри класса, используйте this ключевое слово, но в большинстве случаев в этом нет необходимости.

4. Да, я не заметил, что он это сделал @schgab. Кстати, я отредактировал свой ответ.