작업 2: Windows Form을 사용하는 간단한 주문 양식 만들기
이 작업에서는 자습서에서 사용되는 호스트 응용 프로그램을 만듭니다. 응용 프로그램은 사용자 인터페이스에 Windows Forms을 사용하는 기본적인 주문 양식입니다. 사용자는 이 양식을 사용하여 목록에서 품목을 선택하고 수량 값을 추가할 수 있습니다.
이 작업을 수행한 후에는 이 기능을 지원하는 응용 프로그램을 사용할 수 있습니다. 자습서의 나머지 부분에서는 상태 시스템 워크플로를 호출하고 상태 시스템 워크플로와 통신하는 데 필요한 나머지 코드를 추가합니다.
참고
이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.
Windows Form 소스 코드 파일 만들기
주문 양식을 만들고 호스트 응용 프로그램에 코드를 추가하려면 다음 단계를 따릅니다.
Visual Studio를 사용하는 경우 Windows Form 소스 코드 파일(Program.cs 또는 Program.vb)이 작업 1에서 자동으로 만들어졌습니다.
텍스트 편집기를 사용하여 파일을 만들려면 다음 단계를 따르십시오.
Windows Form 소스 코드 파일을 만들려면
프로젝트 디렉터리에서 Program이라는 새 파일을 만듭니다.
C# 응용 프로그램을 만드는 경우에는 파일에 .cs 확장명을 지정하고, Visual Basic 응용 프로그램을 만드는 경우에는 파일에 .vb 확장명을 지정합니다.
주 프로젝트 파일(StateMachineWorkflow) 끝에 있는 Import 요소 앞에 새 ItemGroup 요소를 삽입합니다.
ItemGroup 요소에서 새 Compile 요소를 추가합니다.
1단계에서 만든 파일 이름을 특성 값으로 사용하여 Include라는새 특성을 Compile 요소에 추가합니다.
SubType이라는 새 자식 요소를 Compile 요소에 추가합니다.
이 요소에 Form 값을 지정합니다. ItemGroup 노드는 다음과 같이 나타납니다.
<ItemGroup> <Compile Include="Program.vb"> <SubType>Form</SubType> </Compile> </ItemGroup>
<ItemGroup> <Compile Include="Program.cs"> <SubType>Form</SubType> </Compile> </ItemGroup>
Windows Form 코드를 호스트 응용 프로그램에 추가하려면
Program 소스 코드 파일에서 Windows Form 응용 프로그램에 대한 다음 코드를 추가합니다.
using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Windows.Forms; using System.Workflow.Runtime; using System.Workflow.Runtime.Hosting; using System.Workflow.Activities; namespace Microsoft.Samples.Workflow.Tutorials.StateMachineWorkflow { public class MainForm : Form { private System.Windows.Forms.Label label1; private System.Windows.Forms.ComboBox itemsList; private System.Windows.Forms.Label label2; private System.Windows.Forms.NumericUpDown itemQuantity; private System.Windows.Forms.Button submitButton; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.ComboBox ordersIdList; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox orderStatus; private System.Windows.Forms.Label label4; private System.ComponentModel.IContainer components = null; private Dictionary<string, List<string>> orderHistory; private string[] inventoryItems = { "Apple", "Orange", "Banana", "Pear", "Watermelon", "Grapes" }; private delegate void ItemStatusUpdateDelegate(Guid orderId, string newStatus); public MainForm() { InitializeComponent(); // Initialize the inventory items list foreach (string item in this.inventoryItems) { this.itemsList.Items.Add(item); } this.itemsList.SelectedIndex = 0; // Initialize the order history collection this.orderHistory = new Dictionary<string, List<string>>(); } private string GetOrderHistory(string orderId) { // Retrieve the order status StringBuilder itemHistory = new StringBuilder(); foreach (string status in this.orderHistory[orderId]) { itemHistory.Append(status); itemHistory.Append(Environment.NewLine); } return itemHistory.ToString(); } private void submitButton_Click(object sender, EventArgs e) { } private void ordersIdList_SelectedIndexChanged(object sender, EventArgs e) { this.orderStatus.Text = GetOrderHistory(this.ordersIdList.SelectedItem.ToString()); } protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.itemsList = new System.Windows.Forms.ComboBox(); this.label2 = new System.Windows.Forms.Label(); this.itemQuantity = new System.Windows.Forms.NumericUpDown(); this.submitButton = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.orderStatus = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); this.ordersIdList = new System.Windows.Forms.ComboBox(); this.label3 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.itemQuantity)).BeginInit(); this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(12, 9); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(23, 13); this.label1.TabIndex = 0; this.label1.Text = "Item"; // // this.itemsList // this.itemsList.DropDownStyle = ComboBoxStyle.DropDownList; this.itemsList.FormattingEnabled = true; this.itemsList.Location = new System.Drawing.Point(13, 26); this.itemsList.Name = "itemsList"; this.itemsList.Size = new System.Drawing.Size(161, 21); this.itemsList.TabIndex = 0; // // label2 // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(12, 50); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(42, 13); this.label2.TabIndex = 2; this.label2.Text = "Quantity"; // // this.itemQuantity // this.itemQuantity.Location = new System.Drawing.Point(13, 67); this.itemQuantity.Minimum = new decimal(new int[] { 1, 0, 0, 0}); this.itemQuantity.Name = "itemQuantity"; this.itemQuantity.Size = new System.Drawing.Size(80, 20); this.itemQuantity.TabIndex = 1; this.itemQuantity.Value = new decimal(new int[] { 1, 0, 0, 0}); // // this.submitButton // this.submitButton.Location = new System.Drawing.Point(99, 64); this.submitButton.Name = "submitButton"; this.submitButton.Size = new System.Drawing.Size(100, 23); this.submitButton.TabIndex = 2; this.submitButton.Text = "Submit Order"; this.submitButton.Click += new System.EventHandler(this.submitButton_Click); // // groupBox1 // this.groupBox1.Controls.Add(this.orderStatus); this.groupBox1.Controls.Add(this.label4); this.groupBox1.Controls.Add(this.ordersIdList); this.groupBox1.Controls.Add(this.label3); this.groupBox1.Location = new System.Drawing.Point(13, 93); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(247, 193); this.groupBox1.TabIndex = 3; this.groupBox1.TabStop = false; this.groupBox1.Text = "Order Status"; // // orderStatus // this.orderStatus.Location = new System.Drawing.Point(7, 82); this.orderStatus.Multiline = true; this.orderStatus.Name = "orderStatus"; this.orderStatus.ReadOnly = true; this.orderStatus.Size = new System.Drawing.Size(230, 105); this.orderStatus.TabIndex = 3; // // label4 // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(8, 65); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(35, 13); this.label4.TabIndex = 2; this.label4.Text = "History"; // // ordersIdList // this.ordersIdList.DropDownStyle = ComboBoxStyle.DropDownList; this.ordersIdList.FormattingEnabled = true; this.ordersIdList.Location = new System.Drawing.Point(7, 37); this.ordersIdList.Name = "ordersIdList"; this.ordersIdList.Size = new System.Drawing.Size(230, 21); this.ordersIdList.TabIndex = 0; this.ordersIdList.SelectedIndexChanged += new System.EventHandler(this.ordersIdList_SelectedIndexChanged); // // label3 // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(7, 20); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(41, 13); this.label3.TabIndex = 0; this.label3.Text = "Order Id"; // // MainForm // this.AcceptButton = this.submitButton; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(272, 298); this.Controls.Add(this.groupBox1); this.Controls.Add(this.submitButton); this.Controls.Add(this.itemQuantity); this.Controls.Add(this.label2); this.Controls.Add(this.itemsList); this.Controls.Add(this.label1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "MainForm"; this.Text = "Simple Order Form"; ((System.ComponentModel.ISupportInitialize)(this.itemQuantity)).EndInit(); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } } static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new MainForm()); } } }
코드 컴파일
코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.
다음 연습 연습 2: 간단한 주문 양식 응용 프로그램 만들기에서는 상태 시스템 워크플로와 간단한 주문 양식 응용 프로그램 간의 통신을 가능하게 하는 데 사용되는 인터페이스를 정의합니다.
참고 항목
개념
기타 리소스
연습 2: 간단한 주문 양식 응용 프로그램 만들기
자습서: 상태 시스템 워크플로 만들기
Ordering State Machine
Simple State Machine
Copyright © 2007 by Microsoft Corporation. All rights reserved.