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);
     }
 }