繁体   English   中英

C#:我对文本框做错了什么?

[英]C#: What am I doing wrong with the textbox?

这是该应用程序到目前为止的样子。 该程序假设允许用户输入距离,然后它将有一个“从”框和一个“到”框,将距离转换为例如“从英寸到英尺”之类的东西。

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

}

你的问题有点误导,看看我认为你想填充组合框的值的评论,

您可以通过添加项目从构造函数以编程方式执行

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属性的值

在此处输入图像描述

在此处输入图像描述

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

首先,您正在做很多不必要的字符串比较。 这是不好的做法。 检查我如何使用enum来填充您的组合框。 检查我如何从 combobox 中读取选定的值。 比较只有在值有效时才能按下按钮的方式。

您可以开始使用新的 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);
        }
    }```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM