如果你的项目的OA,尤其是政府部门的OA,那么一定会涉及工作流这个功能。这个模块说大不大、说小不大,最头疼的就是它的设计器,一直没有合适的。虽然微软出了工作流的3.5和4.0版本,但也没有配套的设计器,只能自己开发。
今天我们使用DevExpress的控件,来实现工作流模板设计器。新建Form页面,继承DevExpress.XtraDiagram.Designer.DiagramDesignerForm类即可。80%的功能都有了,包括顶部菜单、左侧导航按钮和设计区。
public partial class FormDevDiagramDemo : DiagramDesignerForm
下面我们实现这个功能就可以了,单击按钮,往设计区里插入一个图形,同时标记出这个图形的识别码。
protected void AddSingleShape() { //这里可以扩展,比如弹出个页面,记录这个结点属性信息,如:名称、委托人等 string content = "结点的content1"; DiagramShape single = new DiagramShape(BasicShapes.Rectangle, 20, 20, 200, 100, content); single.Tag = content; Diagram.Items.Add(single); Diagram.SelectItem(single); }
再绑定控件的SelectionChanged事件,选中结点时,弹出这个结点的相关信息
private void diagram_SelectionChanged(object sender, DiagramSelectionChangedEventArgs e) { DiagramItem selItem = this.Diagram.PrimarySelection; if (selItem == null) return; FormUIHelper.ShowMessage(selItem.Tag.ToString()); }
完整页面源码
public partial class FormDevDiagramDemo : DiagramDesignerForm { public FormDevDiagramDemo() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); InitializeForm(); } protected void InitializeForm() { WindowState = FormWindowState.Maximized; AddSingleShape(); //this.Diagram.AddingNewItem += diagram_AddingNewItem; this.Diagram.SelectionChanged += diagram_SelectionChanged; } protected void AddSingleShape() { //这里可以扩展,比如弹出个页面,记录这个结点属性信息,如:名称、委托人等 string content = "结点的content1"; DiagramShape single = new DiagramShape(BasicShapes.Rectangle, 20, 20, 200, 100, content); single.Tag = content; Diagram.Items.Add(single); Diagram.SelectItem(single); } //private void diagram_AddingNewItem(object sender, DiagramAddingNewItemEventArgs e) //{ // string tag = FormUIHelper.Prompt("结点Tag值", "请输入入结点Tag值"); // if (string.IsNullOrEmpty(tag)) // return; // e.Item.Tag = tag; //} private void diagram_SelectionChanged(object sender, DiagramSelectionChangedEventArgs e) { DiagramItem selItem = this.Diagram.PrimarySelection; if (selItem == null) return; FormUIHelper.ShowMessage(selItem.Tag.ToString()); } }
相关阅读
文章评论