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