private void gViewer_MouseUp(object sender, MouseEventArgs e) { if (InteractiveMode == InteractiveMode.NonInteractive) { return; } if (mouseDownPosition == e.Location) { if (gViewer.SelectedObject is Microsoft.Msagl.Drawing.Node) { if (InteractiveMode == InteractiveMode.OnlyEdges) { return; } Microsoft.Msagl.Drawing.Node node = gViewer.SelectedObject as Microsoft.Msagl.Drawing.Node; int vertexIndex = int.Parse(node.Id) - 1; VertexSelectedEvent?.Invoke(Graph.Vertices[vertexIndex]); } else if (gViewer.SelectedObject is Microsoft.Msagl.Drawing.Edge) { if (InteractiveMode == InteractiveMode.OnlyVertices) { return; } Microsoft.Msagl.Drawing.Edge edge = gViewer.SelectedObject as Microsoft.Msagl.Drawing.Edge; int sourceIndex = int.Parse(edge.Source) - 1; int targetIndex = int.Parse(edge.Target) - 1; EdgeSelectedEvent?.Invoke(Graph.GetEdge(sourceIndex, targetIndex)); } } mouseDownPosition = Point.Empty; }
private void DoClickWork(PointF mousePoint) { // Если координаты нажатия и отжатия мыши различаются - это не нажатие if (mouseDownPosition != mousePoint) return; // Если неинтерактивный режим, выходим if (InteractiveMode == InteractiveMode.NonInteractive) return; // Если была выбрана вершина или ребро - поднимаем соответствующее событие if (SelectedEdge != null && (InteractiveMode == InteractiveMode.Interactive || InteractiveMode == InteractiveMode.OnlyEdges)) EdgeSelectedEvent?.Invoke(SelectedEdge); else if (SelectedVertex != null && (InteractiveMode == InteractiveMode.Interactive || InteractiveMode == InteractiveMode.OnlyVertices)) VertexSelectedEvent?.Invoke(SelectedVertex); }
// Обработчик на событие нажатия кнопки мыши на контроле private void EduGraphVisualizer_MouseDown(object sender, MouseEventArgs e) { // Если интерактивный режим выключен - выбор элементов графа отключён if (!InteractiveMode) { return; } // Если были выделенная вершина/дуга - оповещаем if (selectedVertex != null) { VertexSelectedEvent?.Invoke(selectedVertex); } else if (selectedEdge != null) { EdgeSelectedEvent?.Invoke(selectedEdge); } }