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();
}
}
}
您的问题在某种程度上具有误导性,查看我认为您想填充组合框值的注释,
您可以通过添加内容从构造函数中以编程方式进行操作
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
填充您的组合框。检查我如何从组合框中读取所选值。比较仅在值有效的情况下才能按下按钮的方式。
您可以开始使用新的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);
}
}```