/// <summary> /// Конструктор формы /// </summary> public MainForm() { InitializeComponent(); // Инициализация полей pressed = false; first = null; links = new List <LogicalLink>(); }
/// <summary> /// Обновление логического выражения /// (не реализовано полностью) /// </summary> private void UpdateExpression() { expressionText.Text = ""; Logicals.LogicalControl root = Root(); if (root == null) { return; } expressionText.Text = root.Code; }
/// <summary> /// Добавление логического элемента на схему /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void addButton_Click(object sender, EventArgs e) { ToolStripButton s = (ToolStripButton)sender; string className = string.Format("LogicForms.Logicals.{0}", s.Tag); // Control c = (Control)Activator.CreateInstance(null, className).Unwrap(); Logicals.LogicalControl c = new Logicals.LogicalControl(); c.BackgroundImage = (Bitmap)Properties.Resources.ResourceManager.GetObject((string)s.Tag); c.Code = (string)s.Tag; c.MouseDown += ComponentMouseDown; c.MouseMove += ComponentMouseMove; c.MouseUp += ComponentMouseUp; c.MouseDoubleClick += ComponentMouseDoubleClick; // Относительная (обратная) координата входа для корректной отрисовки связей c.input = (string)s.Tag == "LogicalNot" ? 2 : 6; // Добавление элемента на схему mainPanel.Controls.Add(c); }
/// <summary> /// Двойной щелчок по элементу /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ComponentMouseDoubleClick(object sender, MouseEventArgs e) { if (first == null) { first = (Logicals.LogicalControl)sender; } else { // Добавление связи LogicalLink link = new LogicalLink() { From = first, To = (Logicals.LogicalControl)sender }; first.Output = link; links.Add(link); // Принудительно перерисовать mainPanel.Invalidate(); // Связь добавлена first = null; // Сформировать логическое выражение UpdateExpression(); } }