我正在VB.NET Winforms中编写一个程序,该程序采用惯用度量并将其转换为度量系统(SI单位)。但是我需要阅读用户在一个框中输入的单位以及在第二个框中输入的单位。例如,用户可以在一个框中输入“Feet”,然后在另一个框中输入“Meters”。我需要使用一个开关来测试它,但写它会效率太低。
'Not efficient:
Select Case CustomaryUnits.Text
Case CustomaryUnits.Text Is "Feet" And MetricUnit.Text Is "Meters"
'etc etc etc
End Select
我该怎么办?
答案 0 :(得分: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.");
}
}
}
您显然可以添加“else if {}”来支持更多转化。
要添加到下拉列表,请执行以下操作:
MeasureableItem inches = new Inches();
MeasureableItem feet = new Feet();
dropDownFrom.Items.Add( inches);
dropDownFrom.Items.Add( feet);
您还必须为“收件人”下拉菜单创建一个专用实例,我不相信这些控件允许您跨多个控件共享项目。