尝试从每个列表框中选择一个输出时执行输出
我试图从2个不同列表框中选择具有相同测量单词的3个选项中的一个。尝试从每个列表框中选择一个输出时执行输出
用户在文本框中输入一个数字,然后从FromList列表框中选择3个单位中的一个(单位是英寸,英尺和码),然后从ToList列表框中选择3个单位中的一个单位也是英寸,英尺和码)。
当计算按钮被点击时,它会将测量英寸转换为英寸(不要数学,只是吐出他们输入的标签)或英寸到英尺或英寸到码(如果FromList已选择英寸)将输出显示到标签。它也可以做脚到英寸,脚到脚(不做数学),脚到码。最后,它会做到码数,码到码,码到码(不算数)。
两个列表框都将SelectionMode设置为1,因此用户只能从每个列表框中选取1个项目。我可以使用SelectedItem将第一个列表框设置为一个值,但是它突出显示的代码中的9个错误是如果我尝试设置它,如果第二个列表框中的项目被选中。以下是我试过到目前为止:
你的问题public frmConverter()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnClear_Click(object sender, EventArgs e)
{
txtEntered.Text = "";
lblOutput.Text = "";
}
private void btnCalc_Click(object sender, EventArgs e)
{
string Fromlist;
string ToList;
double Entered, Output;
Entered = Convert.ToDouble(txtEntered.Text);
if (FromList == "Inches" && ToList == "Inches")
{
lblOutput.Text = txtEntered.Text + " Inches";
}
else if (FromList == "Inches" && ToList =="Feet")
{
Output = Entered/12;
lblOutput.Text = Output.ToString("N2") + (" Feet");
}
else if (FromList == "Inches" && ToList == "Yards")
{
Output = Entered/36;
lblOutput.Text = Output.ToString("N2") + (" Yards");
}
else if (FromList == "Feet" && ToList == "Inches")
{
Output = Entered * 12;
lblOutput.Text = Output.ToString("N2") + (" Inches");
}
else if (FromList == "Feet" && ToList == "Feet")
{
lblOutput.Text = txtEntered.Text + " Feet";
}
else if (FromList == "Feet" && ToList == "Yards")
{
Output = Entered/3;
lblOutput.Text = Output.ToString("N2") + (" Yards");
}
else if (FromList == "Yards" && ToList == "Inches")
{
Output = Entered * 36;
lblOutput.Text = Output.ToString("N2") + (" Inches");
}
else if (FromList == "Yards" && ToList == "Feet")
{
Output = Entered * 12;
lblOutput.Text = Output.ToString("N2") + (" Feet");
}
else if (FromList == "Yards" && ToList == "Yards")
{
lblOutput.Text = txtEntered + " Yards";
}
}
}
一个是你正在使用的赋值运算符,=
,而不是平等的经营者,==
,在你的if语句。
if (FromList.SelectedItem.ToString() == "Inches" && ToList.SelectedItem.ToString() == "Inches")
{
lblOutput.Text = txtEntered.Text + " Inches";
}
另外Entered
永远不会被赋予一个值。
有些事情,你可能要考虑,用枚举来简化你的代码,并摆脱所有这些if
声明:
enum Conversions
{
Inches = 1,
Feet = 12,
Yards = 36,
}
double DoConversion(string from, string to, double quantity)
{
Conversions convertFrom = Conversions.Inches;
Conversions convertTo = Conversions.Inches;
if (Enum.TryParse<Conversions>(from, out convertFrom) && Enum.TryParse<Conversions>(to, out convertTo))
{
return quantity * ((double)convertFrom/(double)convertTo);
}
else
{
return 0;
}
}
这个函数的自/至单位字符串和双为数量并进行转换。而不是乘法或除法不同的算法,它只是乘以2转换值的划分
它现在下降到4个错误 使用未分配的局部变量的‘ToList’ 使用未分配的局部变量的‘fromlist里’ 操作‘==’不能被应用到'System.Windows.Forms.ListBox'和'string'操作数\t 操作符'=='不能应用于'System.Windows.Forms.ListBox'和'string'类型的操作数 – Drakkhul 2014-10-22 04:35:46
@Drakkhul - 你在命名变量时遇到了一些困惑。如果'FromList'和'ToList'是列表框,你不应该命名字符串'Tolist'和'Fromlist',这很难区分它们。我编辑我的答案使用列表框。 – tinstaafl 2014-10-22 04:45:47
我在开始上课,远不及使用枚举任何东西。 – Drakkhul 2014-10-22 06:07:16
问题是你已经采取FromList和ToList作为字符串,你试图从FromList/ToList的SelectedItem属性,但存在FromList/ToList中不存在此类属性,因为您已将它们作为代码中的字符串。可能你需要使用你在定义中定义的Listcontrol而不是在代码中使用字符串对象。
private void btnCalc_Click(object sender, EventArgs e)
{
string Fromlist; // this is string so will not work for you
string ToList; // this is string so will not work for you
string Inches;
string Feet;
string Yards;
double Entered, Output;
//as FromList and ToList are string defined above below logic will not work as there is no property like SelectedItem in string.
if (FromList.SelectedItem = "Inches" && ToList.SelectedItem = "Inches")
{
}
这是现在下降到4个错误 使用未分配的局部变量“ToList” 使用未分配的局部变量“fromlist里” 操作“==”的不能应用于类型“System.Windows.Forms.ListBox”的操作数和'string'\t 运算符'=='不能应用于类型为'System.Windows.Forms.ListBox'和'string'的操作数 – Drakkhul 2014-10-22 04:34:59
您能否告诉我您的FromList和ToList列表框在UI中的显示方式? – jadavparesh06 2014-10-22 09:19:36
FromList在左边,从上到下列出了3个选择:英寸,英尺,码(每个都在他们自己的行上)列表在其右侧,也有从顶部到底部列出的相同选项:英寸,脚,码(每个都有自己的行) – Drakkhul 2014-10-22 14:04:38
好的,所以我使用开关和解析重新编码它,它现在按预期工作。感谢大家的帮助!这里是工作代码:
public Form1()
{
InitializeComponent();
}
private void btnClear_Click(object sender, EventArgs e)
{
txtEntered.Text = "";
lblOutput.Text = "";
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnCalc_Click(object sender, EventArgs e)
{
string From;
string To;
double Entered, Output;
Entered = double.Parse(txtEntered.Text);
if (FromList.SelectedIndex != -1)
{
From = FromList.SelectedItem.ToString();
To = ToList.SelectedItem.ToString();
switch (From)
{
case "Inches":
switch (To)
{
case "Inches":
Output = Entered;
lblOutput.Text = Output.ToString("N2") + " Inches";
break;
case "Feet":
Output = Entered/12;
lblOutput.Text = Output.ToString("N2") + " Feet";
break;
case "Yards":
Output = Entered/36;
lblOutput.Text = Output.ToString("N2") + " Yards";
break;
}
break;
case "Feet":
switch (To)
{
case "Inches":
Output = Entered * 12;
lblOutput.Text = Output.ToString("N2") + " Inches";
break;
case "Feet":
Output = Entered;
lblOutput.Text = Output.ToString("N2") + " Feet";
break;
case "Yards":
Output = Entered/3;
lblOutput.Text = Output.ToString("N2") + " Yards";
break;
}
break;
case "Yards":
switch (To)
{
case "Inches":
Output = Entered * 36;
lblOutput.Text = Output.ToString("N2") + " Inches";
break;
case "Feet":
Output = Entered * 3;
lblOutput.Text = Output.ToString("N2") + " Feet";
break;
case "Yards":
Output = Entered;
lblOutput.Text = Output.ToString("N2") + " Yards";
break;
}
break;
}
}
}
}
}
你能提供你正在得到的错误的详细信息吗? – jadavparesh06 2014-10-22 03:08:49
是的错误是:'字符串'不包含'SelectedItem'的定义,并且没有找到接受'string'类型的第一个参数的扩展方法'SelectedItem'(你是否缺少using指令或程序集引用?) \t它在ToList.SelectedItem = ToList的所有9之后的每个部分都具有SelectedItem下划线 – Drakkhul 2014-10-22 03:11:24
是因为你声明了'string Fromlist'?我注意到代码中的外壳是不同的('Fromlist'从不使用)。 – 2014-10-22 03:18:28