private void StartPaintTrace() { TasksPanel.CreateGraphics().Clear(Color.White); foreach (TaskUI tk in TasksPanel.Controls) { foreach (NetPoint np in tk.Task.Connections) { TaskUI link = null; foreach (TaskUI tik in TasksPanel.Controls) { if (tik.Task == np) { link = tik; break; } } if (link == null) { continue; } Graphics g = TasksPanel.CreateGraphics(); Pen p = new Pen(Color.Black, 3); g.DrawLine(p, tk.APoint, link.APoint); Point center = new Point((tk.APoint.X + link.APoint.X) / 2, (tk.APoint.Y + link.APoint.Y) / 2); AdjustableArrowCap bigArrow = new AdjustableArrowCap(5, 5); p.CustomEndCap = bigArrow; g.DrawLine(p, tk.APoint, center); } } DrawShortPath(); }
private void DrawShortPath() { if (way == null) { return; } Graphics g = TasksPanel.CreateGraphics(); Pen p = new Pen(Color.Red, 5); List <TaskUI> tk = new List <TaskUI>(); foreach (NetPoint np in way) { foreach (TaskUI tik in TasksPanel.Controls) { if (tik.Task == np) { tk.Add(tik); break; } } } for (int i = 0; i < tk.Count - 1; i++) { g.DrawLine(p, tk[i].APoint, tk[i + 1].APoint); Point center = new Point((tk[i].APoint.X + tk[i + 1].APoint.X) / 2, (tk[i].APoint.Y + tk[i + 1].APoint.Y) / 2); AdjustableArrowCap bigArrow = new AdjustableArrowCap(5, 5); p.CustomEndCap = bigArrow; g.DrawLine(p, tk[i].APoint, center); } }
private void LayoutTask(TaskControl task) { task.SuspendLayout(); TasksPanel.Controls.Add(task); TasksPanel.ScrollControlIntoView(task); task.ResumeLayout(); task.Width = TasksPanel.ClientSize.Width - 10; }
/// <summary> /// Обработчик события изменения данных внутри NetPoint для дальнейшей перерисовки панели. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RedrawTasks(object sender, EventArgs e) { Graphics gr = TasksPanel.CreateGraphics(); gr.Clear(Color.White); gr.Dispose(); StartPaintTrace(); }
private void OpenCopyTask() { // Create an instance of the open file dialog box. var ofd = new OpenFileDialog { Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*", FilterIndex = 1, Multiselect = false }; // Set filter options and filter index. // Call the ShowDialog method to show the dialog box. var dialogResult = ofd.ShowDialog(); // Process input if the user clicked OK. if (dialogResult == DialogResult.OK) { ClearAllFields(); StreamReader inputReader = null; try { // Open the selected file to read. var tasksXML = new XmlDocument(); inputReader = new StreamReader(ofd.FileName, Encoding.UTF8); tasksXML.Load(inputReader); FileDirectory = Path.GetDirectoryName(ofd.FileName); txtGeneralInstructions.Text = XMLUtil.GetChildNodeValue(tasksXML["copytask"], "general_instructions"); txtGeneralTitle.Text = XMLUtil.GetChildNodeValue(tasksXML["copytask"], "title"); txtGeneralDescription.Text = XMLUtil.GetChildNodeValue(tasksXML["copytask"], "description"); LanguageComboBox.SelectedItem = XMLUtil.GetChildNodeValue(tasksXML["copytask"], "language"); var taskNodes = tasksXML.DocumentElement.SelectNodes("task"); // Create a TaskControl object for each task node in xml document and add it to the taskspanel. if (taskNodes != null) { foreach (XmlNode node in taskNodes) { var task = new TaskControl(node); TasksPanel.Controls.Add(task); TasksPanel.ScrollControlIntoView(task); task.Width = TasksPanel.ClientSize.Width - 10; } _isExisting = true; } } finally { inputReader?.Close(); } } }
private void TasksPanelSizeChanged(object sender, EventArgs e) { TasksPanel.SuspendLayout(); var taskControls = TasksPanel.Controls. OfType <TaskControl>().ToList(); foreach (var task in taskControls) { task.Width = TasksPanel.ClientSize.Width - 10; } TasksPanel.ResumeLayout(); }