Необходимо реализовать программу Которая рассчитывает например окружность, трапецию и параболу... необходимо в интерфейсе программы реализовать что бы в зависимости от того что выбрано в combobox рассчитывалось по разным формулам подскажите как это можно реализовать?
Идея реализации довольно проста. На гл.окне размещаем ComboBox
и Panel
. Создаем коллекцию нужных фигур, в комбобоксе отображаем названия фигур. После того как сделан выбор той или иной фигуры, отображаем в панеле связанную с этой фигурой UserContorl
. Вычисление площади происходит в классе фигуры.
Создадим класс абстрактн.фигуры
public abstract class Figure
{
//ctor
public Figure(string figureName, UserControl userControl)
{
if (String.IsNullOrEmpty(figureName)) throw new ArgumentException(nameof(figureName));
if (userControl == null) throw new ArgumentNullException(nameof(userControl));
Name = figureName;
Control = userControl;
}
public string Name { get; private set; }
public UserControl Control { get; private set; }
public double Area => GetArea();
protected virtual double GetArea()
{
return 0;
}
}
А теперь класс Окружности
public class Circle : Figure
{
public Circle(string figureName, UserControl userControl,
double diameter) : base(figureName, userControl)
{
if (diameter <= 0) throw new ArgumentException($"Неверное значение для {nameof(diameter)}");
Diameter = diameter;
//даем ссылку вьюшке
(Control as CircleView).Circle = this;
}
private double _Diameter;
public double Diameter
{
get => _Diameter;
set
{
_Diameter = value;
_Radius = _Diameter / 2;
}
}
private double _Radius;
public double Radius
{
get => _Radius;
set
{
_Radius = value;
_Diameter = _Radius * 2;
}
}
protected override double GetArea()
{
return Math.PI * Math.Pow(Radius, 2);
}
}
классы "пустой фигуры" и "трапеции" я показывать не буду, но их вы можете написать сами.
Вот кодбихайнд UserControl
для окружности
public partial class CircleView : UserControl
{
//источник привязок
private BindingSource _bs = new BindingSource();
public CircleView()
{
InitializeComponent();
//установка привязок
SetBindings();
}
private void SetBindings()
{
//тип данных
_bs.DataSource = typeof(Circle);
//привязка для текстбокса Радиуса
var radiusBinding = new Binding("Text", _bs, nameof(Circle.Radius),
true, DataSourceUpdateMode.OnPropertyChanged);
_textBoxRadius.DataBindings.Add(radiusBinding);
//привязка для текстбокса Диаметра
var diameterBinding = new Binding("Text", _bs, nameof(Circle.Diameter),
true, DataSourceUpdateMode.OnPropertyChanged);
_textBoxDiameter.DataBindings.Add(diameterBinding);
//привязка для вывода площади фигуры
var labelBinding = new Binding("Text", _bs, nameof(Circle.Area),
true, DataSourceUpdateMode.OnPropertyChanged, 0, "f4");
_labelArea.DataBindings.Add(labelBinding);
}
/// <summary>
/// Рабочая окружность
/// </summary>
public Circle Circle
{
get => _bs.Current as Circle;
set
{
_bs.Clear();
_bs.Add(value);
}
}
}
А вот кодбихайнд гл.окна (формы)
public partial class MainForm : Form
{
//источник данных (коллекции фигур)
private Context _context = new Context();
//источник привязок
private BindingSource _bsFigures = new BindingSource();
public MainForm()
{
InitializeComponent();
//установка привязок
SetBindings();
//загрузка данных
LoadData();
//настройка окна
this.StartPosition = FormStartPosition.CenterScreen;
this.Text = "Пример";
}
private void SetBindings()
{
//устанавливаем тип источника данных
_bsFigures.DataSource = typeof(List<Figure>);
//подписываемся на изменение текущей выбранной фигуры
_bsFigures.CurrentChanged += BsFigures_CurrentChanged;
//делаем привязку для комбобокса
_comboBoxFigures.DataSource = _bsFigures;
//комбобокс будет отображать названия фигур из коллекции
_comboBoxFigures.DisplayMember = nameof(Figure.Name);
}
private void BsFigures_CurrentChanged(object sender, EventArgs e)
{
//подготовка панели
_panelOutput.Controls.Clear();
//отображение UserControl связанной с соотв.фигурой
_panelOutput.Controls.Add((_bsFigures.Current as Figure).Control);
}
private void LoadData()
{
_bsFigures.DataSource = _context.GetFigures();
}
}
Класс создающий коллекцию фигур такой
public class Context
{
private List<Figure> _figures;
//ctor
public Context()
{
_figures = new List<Figure>
{
new EmptyFigure("Какая?", new EmptyFigureView()),
new Circle("Окружность", new CircleView(), 1),
new Trapezium("Трапеция", new TrapeziumView(), 1, 2, 1)
};
}
public List<Figure> GetFigures()
{
return _figures;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нашел отличный js который конвертирует XML в JSON на лету
Где лучше размещать php-скрипты и фалы к которым доступ должен не предоставляются по http? Вне корневого каталога веб-сайта? Или лучше их помещать...