2014-10-22 38 views
0

我试图从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"; 
     } 
    } 
} 
+0

你能提供你正在得到的错误的详细信息吗? – jadavparesh06 2014-10-22 03:08:49

+0

是的错误是:'字符串'不包含'SelectedItem'的定义,并且没有找到接受'string'类型的第一个参数的扩展方法'SelectedItem'(你是否缺少using指令或程序集引用?) \t它在ToList.SelectedItem = ToList的所有9之后的每个部分都具有SelectedItem下划线 – Drakkhul 2014-10-22 03:11:24

+0

是因为你声明了'string Fromlist'?我注意到代码中的外壳是不同的('Fromlist'从不使用)。 – 2014-10-22 03:18:28

回答

1

一个是你正在使用的赋值运算符,=,而不是平等的经营者,==,在你的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转换值的划分

+0

它现在下降到4个错误 使用未分配的局部变量的‘ToList’ 使用未分配的局部变量的‘fromlist里’ 操作‘==’不能被应用到'System.Windows.Forms.ListBox'和'string'操作数\t 操作符'=='不能应用于'System.Windows.Forms.ListBox'和'string'类型的操作数 – Drakkhul 2014-10-22 04:35:46

+0

@Drakkhul - 你在命名变量时遇到了一些困惑。如果'FromList'和'ToList'是列表框,你不应该命名字符串'Tolist'和'Fromlist',这很难区分它们。我编辑我的答案使用列表框。 – tinstaafl 2014-10-22 04:45:47

+0

我在开始上课,远不及使用枚举任何东西。 – Drakkhul 2014-10-22 06:07:16

0

问题是你已经采取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") 
     { 
} 
+0

这是现在下降到4个错误 使用未分配的局部变量“ToList” 使用未分配的局部变量“fromlist里” 操作“==”的不能应用于类型“System.Windows.Forms.ListBox”的操作数和'string'\t 运算符'=='不能应用于类型为'System.Windows.Forms.ListBox'和'string'的操作数 – Drakkhul 2014-10-22 04:34:59

+0

您能否告诉我您的FromList和ToList列表框在UI中的显示方式? – jadavparesh06 2014-10-22 09:19:36

+0

FromList在左边,从上到下列出了3个选择:英寸,英尺,码(每个都在他们自己的行上)列表在其右侧,也有从顶部到底部列出的相同选项:英寸,脚,码(每个都有自己的行) – Drakkhul 2014-10-22 14:04:38

0

好的,所以我使用开关和解析重新编码它,它现在按预期工作。感谢大家的帮助!这里是工作代码:

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; 
      } 
     } 

     } 
    } 
} 
相关问题