Вычисление нескольких конверсий через поле со списком

#c#

#c#

Вопрос:

Итак, ниже все, что я получил. Он продолжает говорить мне, что я не могу использовать математический оператор для десятичной дроби или double. К сожалению, это то, что мне приходится использовать. Что я пытаюсь сделать, так это преобразовать измерения длин из имперского в метрический. Я просмотрел множество других вопросов, относящихся к этому, и смог выяснить части кода и как заставить его выполнять оператор «if». Но я просто не могу разобраться в математической части этого. Кто-нибудь может указать мне правильное направление?

 public partial class Form1 : Form
{

    string conversions;
    decimal meter, feet, centimeter, inches, miles, kilometers;


    public Form1()
    {
        InitializeComponent();

    }

    private void btnCalculate_Click(object sender, EventArgs e)
    {
        calculateConversions();


    }

    private void Form1_Load(object sender, EventArgs e)
    {
        cbConversion.SelectedText = "Miles to Kilometers";
        string[] Conversion = new string[] { "Miles to Kilometers",
            "Kilometers to Miles",
            "Feet to Meters",
            "Meters to Feet",
            "Inches to Centimeters",
            "Centermeters to Inches" };
        { }
        for (int i = 0; i < Conversion.Length; i  )
        {
            cbConversion.Items.Add(Convert.ToString(Conversion[i]));
        }
        miles = 0m;
        kilometers = 0m;
        feet = 0m;
        meter = 0m;
        inches = 0m;
        centimeter = 0m;



    }


         private void cbConversion_SelectedIndexChanged(object sender, EventArgs e)
    {
        conversions = Convert.ToString(cbConversion.SelectedItem);

        IList<string> lstString = new List<string>();
        lstString.Add("Miles:");
        lstString.Add("Kilometers:");
        lstString.Add("Feet:");
        lstString.Add("Meters:");
        lstString.Add("Inches:");
        lstString.Add("Centimeters:");

        label2.Text = lstString[cbConversion.SelectedIndex];

        IList<string> lstStringTwo = new List<string>();
        lstStringTwo.Add("Kilometers:");
        lstStringTwo.Add("Miles:");
        lstStringTwo.Add("Meters:");
        lstStringTwo.Add("Feet:");
        lstStringTwo.Add("Centimeters:");
        lstStringTwo.Add("Inches:");
        label3.Text = lstStringTwo[cbConversion.SelectedIndex];

    }

private void calculateConversions()
    {
        decimal input = Convert.ToDecimal(txtInput.Text);
        decimal output = Convert.ToDecimal(txtOutput.Text);

        if (cbConversion.SelectedText == "Miles to Kilometers")
        {
            decimal miles = Convert.ToDecimal("");


        }
  

Я даже просмотрел свою книгу и не могу разобраться (это домашнее задание)
Графический интерфейс, который у меня есть. Он выбирается через поле со списком, и введенный текст вычисляется при преобразовании. Все работает, но математика

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

1. В чем ошибка и в какой строке?

2. Возможно, вам захочется выполнить резервную копию шага: «SelectedText», скорее всего, не то, что вы думаете, и "" никогда не преобразуется в десятичное число. Вы также должны использовать Decimal.TryParse пользовательский ввод для отслеживания случаев, когда они вводят I Like Pie вместо цифры

3. Хорошо, я получил это, чтобы позволить мне выполнить математическую часть этого. Я не могу понять, как отобразить это в txtOutput.Text

4. Чтобы взять (почти) что угодно (скажем, что-нибудь с именем theThing ) и преобразовать это в строку, вызовите theThing.ToString()

5. Я пробовал это. как мне отобразить текстовое поле вывода (километры)? проблема в том, что метки меняются в зависимости от выбора в выбранном поле со списком. Я получаю сообщение о том, что формат был необработанным ошибка десятичного ввода = преобразования. Десятичный (txtInput.Text); десятичный вывод = Преобразовать. Десятичный (txtOutput.Text); если (cbConversion. Выбранный текст == «Мили в километры») { miles = Преобразовать. Десятичное число(«»); километры = Преобразовать. Десятичное число (мили * 1.6093м); километры = результат;

Ответ №1:

Я добавил cbConversion.SelectedIndex = 0; в form1_load для выбора первого индекса поля со списком, затем включил calculateConversions() функцию в каждом условии, которое я вывожу в textoutput.text.

Затем остальное вы можете сделать else if и поискать другую формулу для преобразования.

И я использовал cbConversion.SelectedItem.ToString() , чтобы вы могли получить текст элемента из списка со списком для сравнения.

Вы можете попробовать это

 string conversions;
    decimal meter, feet, centimeter, inches, miles, kilometers;

    private void btnCalculate_Click(object sender, EventArgs e)
    {
        calculateConversions();
    }

    public Form1()
    {
        InitializeComponent();



    }

    private void Form1_Load(object sender, EventArgs e)
    {
        cbConversion.SelectedText = "Miles to Kilometers";
        string[] Conversion = new string[] { "Miles to Kilometers",
        "Kilometers to Miles",
        "Feet to Meters",
        "Meters to Feet",
        "Inches to Centimeters",
        "Centermeters to Inches" };
        { }
        for (int i = 0; i < Conversion.Length; i  )
        {
            cbConversion.Items.Add(Convert.ToString(Conversion[i]));
        }
        miles = 0m;
        kilometers = 0m;
        feet = 0m;
        meter = 0m;
        inches = 0m;
        centimeter = 0m;
        cbConversion.SelectedIndex = 0;
    }

    private void cbConversion_SelectedIndexChanged(object sender, EventArgs e)
    {

        conversions = Convert.ToString(cbConversion.SelectedItem);

        IList<string> lstString = new List<string>();
        lstString.Add("Miles:");
        lstString.Add("Kilometers:");
        lstString.Add("Feet:");
        lstString.Add("Meters:");
        lstString.Add("Inches:");
        lstString.Add("Centimeters:");

        label2.Text = lstString[cbConversion.SelectedIndex];

        IList<string> lstStringTwo = new List<string>();
        lstStringTwo.Add("Kilometers:");
        lstStringTwo.Add("Miles:");
        lstStringTwo.Add("Meters:");
        lstStringTwo.Add("Feet:");
        lstStringTwo.Add("Centimeters:");
        lstStringTwo.Add("Inches:");
        label3.Text = lstStringTwo[cbConversion.SelectedIndex];


    }
    private void calculateConversions()
    {
        decimal input = Convert.ToDecimal(txtInput.Text);
        decimal mileToKM = Convert.ToDecimal(1.609344);

        if (cbConversion.SelectedItem.ToString() == "Miles to Kilometers")
        {

            decimal miles = (input * mileToKM);
            txtOutput.Text = miles.ToString();
        }


    }
  

ВЫВОД
введите описание изображения здесь

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

1. Это действительно немного помогает. Это просто не отображает текст в поле вывода. Хотя это немного помогло. Немного сократил мое кодирование.

2. @Amanda в чем еще твоя проблема? итак, я могу разобраться в этом и помочь вам.

3. Текст не отображается в текстовом поле. Когда я нажимаю «рассчитать», ничего не отображается.

4. Неважно, то, что я пробовал, не сработало. Если вы вводите что-либо во входной текст (мили в графическом интерфейсе), предполагается, что преобразование отображается в текстовом поле вывода (километры), но оно не отображает преобразование

5. @Amanda Я получаю вашу ошибку, потому что объявленная вами переменная не использовалась. Эти переменные не используются: десятичный метр, футы, сантиметр, дюймы, мили, километры;

Ответ №2:

@justinmontalban это код, который я использую сейчас

 private void Form1_Load(object sender, EventArgs e)
    {
        cbConversion.SelectedText = "Miles to Kilometers";
        string[] Conversion = new string[] { "Miles to Kilometers",
            "Kilometers to Miles",
            "Feet to Meters",
            "Meters to Feet",
            "Inches to Centimeters",
            "Centermeters to Inches" };
        { }
        for (int i = 0; i < Conversion.Length; i  )
        {
            cbConversion.Items.Add(Convert.ToString(Conversion[i]));
        }
        miles = 0m;
        kilometers = 0m;
        feet = 0m;
        meter = 0m;
        inches = 0m;
        centimeter = 0m;
        cbConversion.SelectedIndex = 0;



    }


         private void cbConversion_SelectedIndexChanged(object sender, EventArgs e)
    {
        conversions = Convert.ToString(cbConversion.SelectedItem);

        IList<string> lstString = new List<string>();
        lstString.Add("Miles:");
        lstString.Add("Kilometers:");
        lstString.Add("Feet:");
        lstString.Add("Meters:");
        lstString.Add("Inches:");
        lstString.Add("Centimeters:");

        label2.Text = lstString[cbConversion.SelectedIndex];

        IList<string> lstStringTwo = new List<string>();
        lstStringTwo.Add("Kilometers:");
        lstStringTwo.Add("Miles:");
        lstStringTwo.Add("Meters:");
        lstStringTwo.Add("Feet:");
        lstStringTwo.Add("Centimeters:");
        lstStringTwo.Add("Inches:");
        label3.Text = lstStringTwo[cbConversion.SelectedIndex];

    }

    private void calculateConversions()
    {
        decimal input = Convert.ToDecimal(txtInput.Text);
        decimal mileToKM = Convert.ToDecimal(1.6093);
        decimal kMToMile = Convert.ToDecimal(0.6214);
        decimal ftToM = Convert.ToDecimal(0.3048);
        decimal mToFt = Convert.ToDecimal(3.2808);
        decimal inToCm = Convert.ToDecimal(2.54);
        decimal cmToIn = Convert.ToDecimal(0.3937);


        if (cbConversion.SelectedText.ToString() == "Miles to Kilometers")
        {
            decimal miles = (input * mileToKM);
            txtOutput.Text = miles.ToString();
        }
  

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

1. Проблема в том, что каждый раз, когда вы нажимаете кнопку рассчитать, ничего не происходит? Вызываете ли вы функцию calculateConversions() каждый раз, когда нажимаете кнопку?

2. да, я даже перенес это в событие click, и ничего не происходит.

3. Попробуйте отладить его, убедитесь, что вы нажали на функцию calculateConversions(). Я обновил свой ответ, я публикую весь свой код, чтобы вы могли проверить.