如果你的项目的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());
}
}
相关阅读

文章评论