2014-01-24 7 views
0

Я пишу программу в VB.NET Winforms, которая берет обычное измерение и превращает его в метрическую систему (единицы СИ). Но мне нужно прочитать, какой пользователь вводил пользователь в один квадрат, и какой блок был введен во втором. Например, пользователь может ввести «Ноги» в одном поле, а затем «Метры» в другом. Мне нужно проверить это, используя переключатель, но его запись будет слишком неэффективной.Прочитайте два текстовых поля с эффективностью

'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

Код не пишет сам. Вы можете либо написать 'if x, либо y ', либо кучу объектов. В чем разница? –

ответ

1

Я хотел бы сделать следующее:

0) Держите текстовое поле, чтобы ввести кол-во/количество футов/дюймов/метров и т.д. ...
1) Используйте выпадающий список вместо текстовых полей.
2) Вместо того, чтобы просто помещать текст в качестве элементов для раскрывающегося списка, создайте классы и добавьте их в качестве элементов. Выпадающие элементы будут иметь их .ToString(), чтобы получить их значения Text для элементов.
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); 

Вы должны создать специальный экземпляр для «To» выпадающий также, я не считаю, что элементы управления позволяют разделить элементы на нескольких управления.

Смежные вопросы