다음을 통해 공유


작업 2: Workflow Designer 호스팅 Windows Form 만들기

이 작업에서는 자습서에서 사용되는 호스트 응용 프로그램을 만듭니다. 응용 프로그램은 Windows Workflow Foundation Designer를 호스팅하는 데 사용할 패널 컨트롤로 구성되어 있습니다. 아래에 있는 패널 컨트롤 TextBox는 사용자가 XAML 코드를 입력할 수 있도록 하고 Workflow Designer에 해당 코드의 결과를 그래픽으로 자동으로 표시하는 데 사용됩니다.

자습서의 나머지 부분에서는 Windows Form에 Windows Workflow Designer를 표시하는 데 필요한 나머지 코드를 추가합니다.

참고

이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.

Windows Form 소스 코드 파일을 만들려면

  • 프로젝트 디렉터리에서 WFEditForm이라는 새 파일을 만듭니다.

C# 응용 프로그램을 만드는 경우 파일에 .cs 확장명을 지정하고 Visual Basic 응용 프로그램을 만드는 경우에는 파일에 .vb 확장명을 지정합니다.

  1. 주 프로젝트 파일(WFEdit) 끝에 있는 Import 요소 앞에 새 ItemGroup 요소를 삽입합니다.

  2. ItemGroup 요소에서 새 Compile 요소를 추가합니다.

  3. 1단계에서 만든 파일 이름을 특성 값으로 사용하여 Include라는 새 특성을 Compile 요소에 추가합니다.

  4. SubType이라는 새 자식 요소를 Compile 요소에 추가합니다.

    이 요소에 Form 값을 지정합니다. ItemGroup 노드는 다음과 같습니다.

    <ItemGroup>
        <Compile Include="WFEditForm.vb">
          <SubType>Form</SubType>
        </Compile>
    </ItemGroup>
    
    <ItemGroup>
        <Compile Include="WFEditForm.cs">
          <SubType>Form</SubType>
        </Compile>
    </ItemGroup>
    

Windows Form 코드를 호스트 응용 프로그램에 추가하려면

  • WFEditForm 소스 코드 파일에서 Windows Form 응용 프로그램에 대한 다음 코드를 추가합니다.

    namespace Microsoft.Samples.Workflow.Quickstarts.WFEdit
    {
        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Text;
        using System.Windows.Forms;
        using System.Workflow.ComponentModel.Design;
        using System.ComponentModel.Design;
        using System.Workflow.ComponentModel;
        using System.Workflow.Activities;
        using System.IO;
        using System.Xml;
        using System.Workflow.ComponentModel.Serialization;
        using System.Collections;
    
        public class WFEditForm : Form
        {
            private System.ComponentModel.IContainer components = null;
            private System.Windows.Forms.SplitContainer splitContainer1;
            private System.Windows.Forms.TextBox xamlView;
            private System.Windows.Forms.Panel placeHolderPanel;
    
            public WFEditForm()
            {
                InitializeComponent();
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            private void InitializeComponent()
            {
                this.splitContainer1 = new System.Windows.Forms.SplitContainer();
                this.placeHolderPanel = new System.Windows.Forms.Panel();
                this.xamlView = new System.Windows.Forms.TextBox();
                this.splitContainer1.Panel1.SuspendLayout();
                this.splitContainer1.Panel2.SuspendLayout();
                this.splitContainer1.SuspendLayout();
                this.SuspendLayout();
                // 
                // splitContainer1
                // 
                this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
                this.splitContainer1.Location = new System.Drawing.Point(0, 0);
                this.splitContainer1.Name = "splitContainer1";
                this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
                // 
                // splitContainer1.Panel1
                // 
                this.splitContainer1.Panel1.Controls.Add(this.placeHolderPanel);
                // 
                // splitContainer1.Panel2
                // 
                this.splitContainer1.Panel2.Controls.Add(this.xamlView);
                this.splitContainer1.Size = new System.Drawing.Size(736, 620);
                this.splitContainer1.SplitterDistance = 245;
                this.splitContainer1.TabIndex = 0;
                // 
                // placeHolderPanel
                // 
                this.placeHolderPanel.Dock = System.Windows.Forms.DockStyle.Fill;
                this.placeHolderPanel.Location = new System.Drawing.Point(0, 0);
                this.placeHolderPanel.Name = "placeHolderPanel";
                this.placeHolderPanel.Size = new System.Drawing.Size(736, 245);
                this.placeHolderPanel.TabIndex = 0;
                // 
                // xamlView
                // 
                this.xamlView.Dock = System.Windows.Forms.DockStyle.Fill;
                this.xamlView.Location = new System.Drawing.Point(0, 0);
                this.xamlView.Multiline = true;
                this.xamlView.Name = "xamlView";
                this.xamlView.Size = new System.Drawing.Size(736, 371);
                this.xamlView.TabIndex = 1;
                this.xamlView.TextChanged += new System.EventHandler(this.xamlView_TextChanged);
                // 
                // WFEditForm
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(736, 620);
                this.Controls.Add(this.splitContainer1);
                this.Name = "WFEditForm";
                this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
                this.Text = "WFEdit";
                this.splitContainer1.Panel1.ResumeLayout(false);
                this.splitContainer1.Panel2.ResumeLayout(false);
                this.splitContainer1.Panel2.PerformLayout();
                this.splitContainer1.ResumeLayout(false);
                this.ResumeLayout(false);
    
            }
    
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
            }
    
            private void xamlView_TextChanged(object sender, EventArgs e)
            {
            }
        }
    }
    

응용 프로그램 진입점 소스 파일을 만들려면

  1. 프로젝트 디렉터리에서 Program이라는 새 파일을 만듭니다.

  2. C# 응용 프로그램을 만드는 경우 파일에 .cs 확장명을 지정하고, Visual Basic 응용 프로그램을 만드는 경우에는 파일에 .vb 확장명을 지정합니다.

  3. 첫 번째 절차에서 만든 주 프로젝트 파일(RulesAndConditions)의 ItemGroup 요소에서 새 Compile 요소를 추가합니다.

  4. Include라는 새 특성을 Compile 요소에 추가합니다.

    1단계에서 만든 파일 이름을 특성 값으로 사용합니다.

  5. 최종 ItemGroup 노드는 다음과 같습니다.

    <ItemGroup>
        <Compile Include="PointOfSaleSimulator.vb">
            <SubType>Form</SubType>
        </Compile>
        <Compile Include="Program.vb" />
    </ItemGroup>
    
    <ItemGroup>
        <Compile Include="PointOfSaleSimulator.cs">
            <SubType>Form</SubType>
        </Compile>
        <Compile Include="Program.cs" />
    </ItemGroup>
    

응용 프로그램 진입점에 대한 코드를 추가하려면

  1. 이전 절차에서 만든 Program 파일에서 다음 코드를 추가하여 응용 프로그램이 시작될 때 Windows Form 응용 프로그램을 엽니다.

    namespace Microsoft.Samples.Workflow.Quickstarts.WFEdit
    {
        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Text;
        using System.Windows.Forms;
        using System.Workflow.ComponentModel.Design;
        using System.ComponentModel.Design;
        using System.Workflow.ComponentModel;
        using System.Workflow.Activities;
        using System.IO;
        using System.Xml;
        using System.Workflow.ComponentModel.Serialization;
        using System.Collections;
    
        public class WFEditForm : Form
        {
            private System.ComponentModel.IContainer components = null;
            private System.Windows.Forms.SplitContainer splitContainer1;
            private System.Windows.Forms.TextBox xamlView;
            private System.Windows.Forms.Panel placeHolderPanel;
    
            public WFEditForm()
            {
                InitializeComponent();
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            private void InitializeComponent()
            {
                this.splitContainer1 = new System.Windows.Forms.SplitContainer();
                this.placeHolderPanel = new System.Windows.Forms.Panel();
                this.xamlView = new System.Windows.Forms.TextBox();
                this.splitContainer1.Panel1.SuspendLayout();
                this.splitContainer1.Panel2.SuspendLayout();
                this.splitContainer1.SuspendLayout();
                this.SuspendLayout();
                // 
                // splitContainer1
                // 
                this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
                this.splitContainer1.Location = new System.Drawing.Point(0, 0);
                this.splitContainer1.Name = "splitContainer1";
                this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
                // 
                // splitContainer1.Panel1
                // 
                this.splitContainer1.Panel1.Controls.Add(this.placeHolderPanel);
                // 
                // splitContainer1.Panel2
                // 
                this.splitContainer1.Panel2.Controls.Add(this.xamlView);
                this.splitContainer1.Size = new System.Drawing.Size(736, 620);
                this.splitContainer1.SplitterDistance = 245;
                this.splitContainer1.TabIndex = 0;
                // 
                // placeHolderPanel
                // 
                this.placeHolderPanel.Dock = System.Windows.Forms.DockStyle.Fill;
                this.placeHolderPanel.Location = new System.Drawing.Point(0, 0);
                this.placeHolderPanel.Name = "placeHolderPanel";
                this.placeHolderPanel.Size = new System.Drawing.Size(736, 245);
                this.placeHolderPanel.TabIndex = 0;
                // 
                // xamlView
                // 
                this.xamlView.Dock = System.Windows.Forms.DockStyle.Fill;
                this.xamlView.Location = new System.Drawing.Point(0, 0);
                this.xamlView.Multiline = true;
                this.xamlView.Name = "xamlView";
                this.xamlView.Size = new System.Drawing.Size(736, 371);
                this.xamlView.TabIndex = 1;
                this.xamlView.TextChanged += new System.EventHandler(this.xamlView_TextChanged);
                // 
                // WFEditForm
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(736, 620);
                this.Controls.Add(this.splitContainer1);
                this.Name = "WFEditForm";
                this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
                this.Text = "WFEdit";
                this.splitContainer1.Panel1.ResumeLayout(false);
                this.splitContainer1.Panel2.ResumeLayout(false);
                this.splitContainer1.Panel2.PerformLayout();
                this.splitContainer1.ResumeLayout(false);
                this.ResumeLayout(false);
    
            }
    
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
            }
    
            private void xamlView_TextChanged(object sender, EventArgs e)
            {
            }
        }
    }
    
  2. 응용 프로그램을 빌드하고 실행합니다.

코드 컴파일

코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.

참고 항목

개념

Workflow Designer 호스팅

기타 리소스

Basic Designer Hosting Sample
Outlook Workflow Wizard Sample
Workflow Monitor Sample
Tracking Profile Designer Sample

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.