2014-10-22 46 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; 
      } 
     } 

     } 
    } 
} 
相關問題