C#: Что я делаю не так с текстовым полем? - PullRequest
0 голосов
/ 06 апреля 2020

Так выглядит приложение до сих пор. Предполагается, что программа позволяет пользователю вводить расстояние, тогда она будет иметь поле «from» и поле «to», которые преобразуют расстояние, например, в «от дюймов до футов».

Когда я запускаю программу, поля «to» и «from» пусты. В полях должны быть указаны дюймы, футы и дворы. Что не так в моем коде здесь?

namespace DistanceConverter
{
    public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void convertButton_Click(object sender, EventArgs e)
    {

        int fromDistance;
        int toDistance = 0;

        fromDistance = int.Parse(textBox1.Text);
        string measureInput = fromBox.Items[fromBox.SelectedIndex].ToString();
        string measureOutput = toBox.Items[toBox.SelectedIndex].ToString();

        switch (measureInput)
        {
            case "Yards":
                switch (measureOutput)
                {
                    case "Inches":
                        toDistance = fromDistance;
                        break;
                    case "Yards":
                        toDistance = fromDistance * 3;
                        break;
                    case "Feet":
                        toDistance = fromDistance * 3 * 12;
                        break;
                }
                break;
            case "Feet":
                switch (measureOutput)
                {
                    case "Inches":
                        toDistance = fromDistance;
                        break;
                    case "Yards":
                        toDistance = fromDistance / 3;
                        break;
                    case "Feet":
                        toDistance = fromDistance * 12;
                        break;
                }
                break;
            case "Inches":
                switch (measureOutput)
                {
                    case "Inches":
                        toDistance = fromDistance;
                        break;
                    case "Feet":
                        toDistance = fromDistance / 12;
                        break;
                    case "Yards":
                        toDistance = fromDistance / (3 * 12);
                        break;
                }
                break;
        }

        distanceConverted.Text = toDistance.ToString();
    }
}

}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

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

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

Вы можете начать использовать новую функцию C#, выражение переключения. Мои несколько строк не завершены, но должны дать вам подсказку в правильном направлении.

    {
        double fromValue;

        enum Units
        {
            Inches,
            Yards,
            Feet
        }

        public Form1()
        {
            InitializeComponent();

            button1.Enabled = false;
            fromBox.DataSource = Enum.GetValues(typeof(Units));
            toBox.DataSource = Enum.GetValues(typeof(Units));
        }


        private double convert(Units from, Units to, double value)
        {
            return (from, to) switch
            {
                (Units.Yards, Units.Inches) => value * 36.0,
                (Units.Yards, Units.Yards) => value,
                //..
            };

        }

        private void button1_Click(object sender, EventArgs e)
        {
            var fromUnit = (Units)fromBox.SelectedItem;
            var toUnit = (Units)toBox.SelectedItem;

            label1.Text = convert(fromUnit, toUnit, fromValue).ToString();
        }



        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            button1.Enabled = Double.TryParse(textBox1.Text, out fromValue);
        }
    }```
0 голосов
/ 06 апреля 2020

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

Вы можете сделать это программно из конструктора, добавив элементы

public Form1()
{
    InitializeComponent();

    // Populate fromBox
    fromBox.Items.Add("Inches");
    fromBox.Items.Add("Yards");
    fromBox.Items.Add("Feet");

    // Populate toBox
    toBox.Items.Add("Inches");
    toBox.Items.Add("Yards");
    toBox.Items.Add("Feet");
}

или настройку DataSource

public Form1()
{
    InitializeComponent();

    var items = new List<string>
    {
        "Inches",
        "Yards",
        "Feet"
    };

    comboBox1.DataSource = items;
    comboBox2.DataSource = items;
}

или вы можете установить значения свойства Items на панели свойств

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...