none
把WWF工作流设计器嵌入到winform中(vs2005 + WWF beta2.2) RRS feed

  • 常规讨论

  • using System;
    using System.Collections.Generic;
    using System.Text;
    using System.ComponentModel.Design;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Workflow.Activities;
    using System.Workflow.ComponentModel.Design;
    using System.Workflow.ComponentModel;

     

    namespace WindowsApplication3
    {
        public partial class Form1 : Form
        {
            private WorkflowView wlv;
            private WorkflowViewWrapper workflowViewWrapper;
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                //这样是错误的
               // wlv = new WorkflowView();
               // this.panel1.Controls.Add(wlv);

                //这个是正确的
                this.workflowViewWrapper=new WorkflowViewWrapper(this);
                this.panel1.Controls.Add(this.workflowViewWrapper.workflowView);
                this.workflowViewWrapper.LoadDefaulttWorkflow();
            }
        }

        public class WorkflowViewWrapper
        {
            private DesignSurface surface;
            public WorkflowView workflowView;
            private IDesignerHost host;
            private SequentialWorkflowActivity sequentialWorkflow;

            public WorkflowViewWrapper(Form parent)
            {
                 //Create a Workflow Design Surface
                //创建设计时的环境以显示WorkflowView
                this.surface = new DesignSurface();

                //Get the Workflow Designer Host
                //获得管理设计器的接口对象
                this.host=this.surface.GetService(typeof(IDesignerHost)) as IDesignerHost;
                if(this.host==null)
                    return;
               
                //Create a Sequential Workflow by using the Workflow Designer Host
                sequentialWorkflow=(SequentialWorkflowActivity)host.CreateComponent(typeof(SequentialWorkflowActivity));
                //sequentialWorkflow.ID="SequentialWorkflow1";
               
                //Create a Workflow view on the workflow Design surface
                //指定的Surface显示WorkflowView
                this.workflowView=new WorkflowView(this.surface as IServiceProvider);
                this.workflowView.Dock=DockStyle.Fill;

                //Activate the Workflow view
                this.host.Activate();
            }

            public void LoadDefaulttWorkflow()
            {
                //Create a code activity
                CodeActivity CodeActivity1= new CodeActivity();
                sequentialWorkflow.Activities.Add(CodeActivity1);
                host.RootComponent.Site.Container.Add(CodeActivity1);
            }

        }  
     }

    转自:http://blog.csdn.net/eroschina/

    2009年6月18日 9:14