Хобрук: Ваш путь к мастерству в программировании

С#: мгновенное обновление текстового поля промежуточного итога при выборе 4 вариантов со списком

Это мой первый пост на StackOverflow, будьте добры :D!

Я разрабатываю калькулятор счетов в ресторане для класса. Учитывая пользовательский ввод в четырех полях со списком: напиток, закуска, основное блюдо и десерт, у меня есть код, вычисляющий промежуточный итог, налог и общую сумму. Для каждого поля со списком у меня есть список предопределенных элементов и значений, связанных с каждым элементом. Я смог успешно закодировать это. Когда пользователь выбирает свои элементы, у меня автоматически обновляются мои промежуточные итоги, подсказки и общие текстовые поля. Итого = bevPrice + appPrice + mainPrice + dessPrice. Налог = промежуточный итог * 0,1 млн. Итого = промежуточный итог + налог.

Моя проблема: скажем, пользователь вводит свой выбор для каждой категории (напиток, приложение, основное, десерт). Затем, предположим, пользователь возвращается к напитку (combobox1) и решает изменить его с одного варианта на другой. Мой код обнуляет другие варианты выбора, даже если был выбран вариант. Точно так же, скажем, пользователь вводит все четыре варианта выбора, а затем возвращается, чтобы изменить свое основное блюдо (combobox3), мой код сохраняет поля со списком 1 и 2 (напиток и закуска), добавляет новое выбранное основное блюдо, но обнуляет поле со списком 4 (десерт).

Я знаю, что эта проблема возникает из-за обработчика события selectionindexchanged. Если выбор поля со списком 2 изменен, то он вычисляет поля со списком 1 и 2, но изменения не произошли в полях со списком 3 и 4, поэтому он возвращает его значение 0. Верно?

Я уверен, что ответ очевиден, но я новичок. Спасибо!

В любом случае, вот предварительный просмотр моего кода (извините, я такой многословный):

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Menu bevSelect = comboBox1.SelectedItem as Menu;
        textBox3.Text = Convert.ToString(bevSelect.bevPrice);

    }

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        Menu appSelect = comboBox2.SelectedItem as Menu;
        Menu bevSelect = comboBox1.SelectedItem as Menu;
        textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice);
    }

    private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
    {
        Menu mainSelect = comboBox3.SelectedItem as Menu;
        Menu appSelect = comboBox2.SelectedItem as Menu;
        Menu bevSelect = comboBox1.SelectedItem as Menu;
        textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice + mainSelect.mainPrice);
    }

    private void comboBox4_SelectedIndexChanged(object sender, EventArgs e)
    {
        Menu dessSelect = comboBox4.SelectedItem as Menu;
        Menu mainSelect = comboBox3.SelectedItem as Menu;
        Menu appSelect = comboBox2.SelectedItem as Menu;
        Menu bevSelect = comboBox1.SelectedItem as Menu;
        textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice + mainSelect.mainPrice + dessSelect.dessPrice);

А вот и видео!

09.03.2017

  • Просто проверяйте каждое поле со списком, когда любое из них изменяется. 09.03.2017
  • Я не уверен, в чем здесь вопрос. Похоже, вы просите нас объяснить вам код, написанный вами. Это правильно? 09.03.2017
  • @KenWhite Извините за двусмысленность, я хотел знать, почему он не работает не по порядку и как это исправить, но я нашел решение. Благодарю вас! 12.03.2017

Ответы:


1

Это происходит потому, что в вашем первом обработчике вы заполняете текстовое поле только расчетами из первого поля со списком. Вы должны создать функцию, которая рассчитывает ваш счет на основе всех 4 выбранных элементов, и вы должны вызвать ее в своем обработчике SelectedIndexChanged. В основном ваш метод должен делать то, что делает ваш последний обработчик.

private void comboBox1/2/3/4_SelectedIndexChanged(object sender, EventArgs e)
{
  calculateBill();
}

private void calculateBill()
{
    Menu dessSelect = comboBox4.SelectedItem as Menu;
    Menu mainSelect = comboBox3.SelectedItem as Menu;
    Menu appSelect = comboBox2.SelectedItem as Menu;
    Menu bevSelect = comboBox1.SelectedItem as Menu;
    textBox3.Text = Convert.ToString(bevSelect.bevPrice + appSelect.appPrice + mainSelect.mainPrice + dessSelect.dessPrice);
}
09.03.2017
  • Ударь меня. Я как раз собирался нажать «Отправить» в своем ответе, лол. 09.03.2017
  • Я получаю исключение System.NullReferenceException для textbox3.Text = Convert.ToString(x+y...+z) 12.03.2017
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..