2014-01-24 70 views
0

我正在使用VB.NET Winforms編寫一個程序,它需要進行習慣測量並將其轉換爲公制系統(SI單元)。但我需要閱讀用戶在一個框中輸入的單位以及在第二個框中輸入了什麼單位。例如,用戶可以在一個框中輸入「英尺」,然後在另一個框中輸入「米」。我需要使用開關來測試它,但是編寫它會效率太低。高效地閱讀兩個文本框

'Not efficient: 
Select Case CustomaryUnits.Text 
    Case CustomaryUnits.Text Is "Feet" And MetricUnit.Text Is "Meters" 
'etc etc etc 
End Select 

我能做些什麼呢?

+1

什麼是消耗時間,你寫代碼或我們讀這個? –

+0

編寫代碼。 – stackptr

+0

代碼不會自行寫入。你可以寫'如果x和y'或者一堆物體。有什麼不同? –

回答

1

我會做到以下幾點:

0)保持文本框中輸入英尺/英寸/米等的數量/數...
1)使用下拉列表,而不是文本框。
2)不只是把文本作爲下拉項目創建類並將它們添加爲項目。下拉項目將調用其.ToString()來獲取項目的文本值。
3)所有這些項目都可以繼承基類/抽象類,以便傳遞qty值。

例如,您的下拉項可以是這樣的:

我是一個C#的人,不必因此這裏轉換的時間是我的想法在C#代碼表示。

public abstract class MeasureableItem 
{ 

    public string Name { get; private set; } 
    public MeasureableItem(string name) 
    { 
     Name= name; 
    } 
    public abstract decimal ConvertFrom(MeasureableItem from, decimal qty); 
    public override string ToString() { return Name; } 
} 

你會再定義一些類型:

public class Inches : MeasureableItem 
{ 
    public Inches() : base("Inches") {} 
    public override decimal ConvertFrom(MeasureableItem from, decimal qty) 
    { 
     if (from is typeof(Feet)) 
     { 
      return qty * (decimal)12; 
     } 
     else{ 
      throw new Exception("Unhandled conversion."); 
     } 
    } 
} 

public class Feet : MeasureableItem 
{ 
    public Feet() : base("Feet") {} 

    public override decimal ConvertFrom(MeasureableItem from, decimal qty) 
    { 
     if (from is typeof(Inches)) 
     { 
      return qty/(decimal)12; 
     } 
     else{ 
      throw new Exception("Unhandled conversion."); 
     } 
    } 
} 

你可以明顯增加 「否則,如果{}」,以支持更多的轉換。

要添加到下拉做到這一點:

MeasureableItem inches = new Inches(); 
MeasureableItem feet = new Feet(); 

dropDownFrom.Items.Add(inches); 
dropDownFrom.Items.Add(feet); 

你將不得不爲「到」下拉菜單還,我不相信這些控件讓你分享在多個項目之間創建一個專用實例控制。