[英]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.