C#:我的文本框在做什么错?

问题描述 投票:-1回答:2

This is what the app looks like so far. 该程序假定允许用户输入距离,然后它将有一个“从”框和一个“到”框,例如,该框会将距离转换为类似的“从英寸到英尺” 。

当我运行程序时,虽然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();
    }
}

}

c#
2个回答
0
投票

您的问题在某种程度上具有误导性,查看我认为您想填充组合框值的注释,

您可以通过添加内容从构造函数中以编程方式进行操作

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


0
投票

这是没有答案,只是一些正确方向的提示,不能发布为评论!

首先,您进行了大量不必要的字符串比较。这是不好的做法。检查我如何使用enum填充您的组合框。检查我如何从组合框中读取所选值。比较仅在值有效的情况下才能按下按钮的方式。

您可以开始使用新的C#功能,即switch表达式。我的几行内容不完整,但应该向正确的方向提示。

    {
        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);
        }
    }```
© www.soinside.com 2019 - 2024. All rights reserved.