📄 mainform.cs
字号:
e.Graphics.DrawImage(bmp, rci, 1, 1, 26, 26,
GraphicsUnit.Pixel);
bmp.Dispose();
}
private void ConnectorList_OnMeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
{
e.ItemHeight = 32;
}
private void ConnectorList_OnDrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
if(e.Index < 0)
return;
// Draw the item
ListBox_DrawItem(_connectorList, e);
if((e.State & DrawItemState.Selected) > 0)
_hidden.BackColor = Color.LightYellow;
else
_hidden.BackColor = Color.White;
// Draw the node
Box b1, b2;
Arrow a;
_hidden.ClearAll();
b1 = _hidden.CreateBox(-4, 1, 5, 24);
b2 = _hidden.CreateBox(18, 1, 5, 24);
a = _hidden.CreateArrow(b1, b2);
b1.Visible = false;
b2.Visible = false;
a.ArrowHead = _connectors[e.Index].Head;
Bitmap bmp = _hidden.CreateBmpFromChart();
Rectangle rci = new Rectangle(e.Bounds.Left + 3,
e.Bounds.Top + 4, 24, 24);
e.Graphics.DrawImage(bmp, rci, 1, 1, 26, 26,
GraphicsUnit.Pixel);
bmp.Dispose();
}
private void ConnectorList_OnSelectionChanged(object sender, System.EventArgs e)
{
int si = _connectorList.SelectedIndex;
if(si < 0 || si >= _connectors.Length)
return;
_flowChart.ArrowHead = _connectors[si].Head;
}
private void NodeList_OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
DoDragDrop(new NodeDragItem(_nodeList.SelectedIndex),
DragDropEffects.Copy);
}
private void FlowChart_OnDragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
if(e.Data.GetDataPresent(NodeDragItem._GetType()))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void FlowChart_OnDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
if(e.Data.GetDataPresent(NodeDragItem._GetType()))
{
NodeDragItem sdi = (NodeDragItem)e.Data.GetData(NodeDragItem._GetType());
if(sdi.Index >= 0 && sdi.Index < _nodes.Length)
{
Point p = _flowChart.PointToClient(new Point(e.X, e.Y));
PointF pt = _flowChart.ClientToDoc(new Point(p.X, p.Y));
AnchorPattern ap = _nodes[sdi.Index].Anchor;
foreach(AnchorPoint point in ap.Points)
{
point.MarkStyle = _anchorStyle;
point.Color = _anchorColor;
}
Box b = _flowChart.CreateBox(pt.X, pt.Y, 20, 20);
b.Style = EBoxStyle.bsComplex;
b.ShapeTemplate = _nodes[sdi.Index].Template;
b.AssignAnchorPattern(ap);
b.SelStyle = ESelStyle.sstDashFrame;
}
}
}
private void FlowChart_OnBoxActivated(object sender, MindFusion.FlowChartX.BoxEventArgs e)
{
_selected = new NodeProps();
_selected.Text = e.box.Text;
_selected.Font = e.box.Font;
_selected.FillColor = e.box.FillColor;
_propertyGrid.SelectedObject = _selected;
}
private void FlowChart_OnBoxDeactivated(object sender, MindFusion.FlowChartX.BoxEventArgs e)
{
_propertyGrid.SelectedObject = null;
_selected = null;
}
private void FlowChart_OnBoxClicked(object sender, MindFusion.FlowChartX.BoxMouseArgs e)
{
if(e.button != MouseButtons.Right)
return;
Point pt = _flowChart.DocToClient(
new PointF(e.x + e.box.BoundingRect.Left,
e.y + e.box.BoundingRect.Top));
_contextMenu.Show(_flowChart, pt);
}
private void FlowChart_OnArrowClicked(object sender, MindFusion.FlowChartX.ArrowMouseArgs e)
{
if(e.button != MouseButtons.Right)
return;
Point pt = _flowChart.DocToClient(
new PointF(e.x + e.arrow.BoundingRect.Left,
e.y + e.arrow.BoundingRect.Top));
_contextMenu.Show(_flowChart, pt);
}
private void OnPropertyValueChanged(object s, System.Windows.Forms.PropertyValueChangedEventArgs e)
{
if(_flowChart.Selection.Boxes.Count == 0)
return;
Box b = _flowChart.Selection.Boxes[0];
if(b == null)
return;
// Create undo record
MindFusion.FlowChartX.Commands.ChangeItemCmd cmd =
new MindFusion.FlowChartX.Commands.ChangeItemCmd(b, "Property change");
b.Text = _selected.Text;
b.Font = _selected.Font;
b.FillColor = _selected.FillColor;
cmd.Execute();
}
private void OnFileNew(object sender, System.EventArgs e)
{
_flowChart.ClearAll();
}
private void OnFileOpen(object sender, System.EventArgs e)
{
if(_openFileDialog.ShowDialog(this) == DialogResult.OK)
{
try
{
_flowChart.LoadFromFile(_openFileDialog.FileName);
}
catch
{
MessageBox.Show(this, "Failed to open document!");
}
}
}
private void OnFileSave(object sender, System.EventArgs e)
{
if(_saveFileDialog.ShowDialog(this) == DialogResult.OK)
{
_flowChart.SaveToFile(_saveFileDialog.FileName, true);
}
}
private void OnPrintPreview(object sender, System.EventArgs e)
{
_flowChart.PrintOptions.DocumentName = "Flowchart";
_flowChart.PrintOptions.EnableImages = false;
_flowChart.PrintOptions.EnableInterior = true;
_flowChart.PrintOptions.EnableShadows = true;
_flowChart.PrintOptions.Scale = 100;
_flowChart.PrintPreview();
}
private void OnPrint(object sender, System.EventArgs e)
{
_flowChart.PrintOptions.DocumentName = "Flowchart";
_flowChart.PrintOptions.EnableImages = false;
_flowChart.PrintOptions.EnableInterior = true;
_flowChart.PrintOptions.EnableShadows = true;
_flowChart.PrintOptions.Scale = 100;
_flowChart.Print();
}
private void OnExit(object sender, System.EventArgs e)
{
this.Close();
}
private void OnAbout(object sender, System.EventArgs e)
{
AboutDialog dlg = new AboutDialog();
dlg.ShowDialog(this);
}
private void ConnectorTypeCombo_OnSelectedValueChange(object sender, System.EventArgs e)
{
EArrowStyle ast = EArrowStyle.asPolyline;
short segments = 1;
switch(_connectorTypeCombo.SelectedIndex)
{
case 0:
ast = EArrowStyle.asPolyline;
break;
case 1:
ast = EArrowStyle.asBezier;
break;
case 2:
ast = EArrowStyle.asPerpendicular;
segments = 3;
break;
}
_flowChart.ArrowStyle = ast;
_flowChart.ArrowSegments = segments;
}
private void OnDelete(object sender, System.EventArgs e)
{
if(_flowChart.Selection.Boxes.Count > 0)
_flowChart.DeleteObject(_flowChart.Selection.Boxes[0]);
if(_flowChart.Selection.Arrows.Count > 0)
_flowChart.DeleteObject(_flowChart.Selection.Arrows[0]);
}
#endregion
private void OnOptions(object sender, System.EventArgs e)
{
OptionsDialog dlg = new OptionsDialog();
dlg.ShowGrid = _flowChart.ShowGrid;
dlg.BackgroundColor = _flowChart.BackColor;
dlg.NodeColor = _flowChart.BoxFillColor;
dlg.ConnectorColor = _flowChart.ArrowFillColor;
dlg.AnchorColor = _anchorColor;
dlg.ShowAnchors = _flowChart.ShowAnchors != EShowAnchors.saNever;
switch(_anchorStyle)
{
case EMarkStyle.msCircle:
dlg.AnchorStyle = 0;
break;
case EMarkStyle.msRect:
dlg.AnchorStyle = 1;
break;
case EMarkStyle.msX:
dlg.AnchorStyle = 2;
break;
default:
dlg.AnchorStyle = 0;
break;
}
if(dlg.ShowDialog(this) == DialogResult.OK)
{
_flowChart.ShowGrid = dlg.ShowGrid;
_flowChart.BackColor = dlg.BackgroundColor;
_flowChart.BoxFillColor = dlg.NodeColor;
_flowChart.ArrowFillColor = dlg.ConnectorColor;
_anchorColor = dlg.AnchorColor;
_flowChart.ShowAnchors = dlg.ShowAnchors ?
EShowAnchors.saAuto : EShowAnchors.saNever;
switch(dlg.AnchorStyle)
{
case 0:
_anchorStyle = EMarkStyle.msCircle;
break;
case 1:
_anchorStyle = EMarkStyle.msRect;
break;
case 2:
_anchorStyle = EMarkStyle.msX;
break;
default:
_anchorStyle = EMarkStyle.msCircle;
break;
}
}
}
private void OnEditPopup(object sender, System.EventArgs e)
{
if (_flowChart.UndoManager.History.NextUndo != null)
{
_menuUndo.Enabled = true;
_menuUndo.Text = "Undo " + _flowChart.UndoManager.History.NextUndo.Title;
}
else
{
_menuUndo.Enabled = false;
_menuUndo.Text = "Undo";
}
if (_flowChart.UndoManager.History.NextRedo != null)
{
_menuRedo.Enabled = true;
_menuRedo.Text = "Redo " + _flowChart.UndoManager.History.NextRedo.Title;
}
else
{
_menuRedo.Enabled = false;
_menuRedo.Text = "Redo";
}
}
private void OnUndo(object sender, System.EventArgs e)
{
_flowChart.UndoManager.Undo();
}
private void OnRedo(object sender, System.EventArgs e)
{
_flowChart.UndoManager.Redo();
}
private void _rightPanel_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
}
private void _flowChart_Click(object sender, System.EventArgs e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -