2014-01-24 102 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); 

你将不得不为“到”下拉菜单还,我不相信这些控件让你分享在多个项目之间创建一个专用实例控制。