以下は、上で提案したことをまとめた非常に簡単な例です。わかりやすくするために、ベスト プラクティスに従っているわけではありません。以下で注目すべき領域は、EmployeeModel クラス、Form1およびForm2 ソースです。
ここでの考え方は、両方のフォームがアクセスできるコンテナーとして EmployeeModel クラスを利用することです。
Form1は社員情報を取得します。(モデル クラスには任意の情報を含めることができることに注意してください。プロパティだけに予約する必要はありません。必要に応じて、ここでデータセットへの参照を保持できます。)
フォーム 2 には、この EmployeeModel クラスへの参照があります。ボタン クリック イベントが form1 で発生すると、新しい EmployeeModel クラス オブジェクトが作成され、form2 に表示される関連情報で初期化されます。次に、Form2 のオーバーロードされたコンストラクターを使用して、オブジェクト参照として渡されます。
Form2 の Onload イベントで、label.Text プロパティは、参照として渡された EmployeeModel に含まれるもので初期化されます。
これは非常に基本的な実装であり、拡張性と保守性も考慮すべき要素であるほとんどの実際のアプリケーションでは、MVPまたはMVVM WinForms アーキテクチャ フレームワークが通常使用されます。
フォーム 1 デザイナー:
namespace FormToFormExample
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(12, 12);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(260, 20);
this.textBox1.TabIndex = 0;
//
// button1
//
this.button1.Location = new System.Drawing.Point(197, 64);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 2;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 100);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
}
}
フォーム 2 デザイナー:
namespace FormToFormExample
{
partial class Form2
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
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(35, 13);
this.label1.TabIndex = 0;
this.label1.Text = "label1";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 34);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(35, 13);
this.label2.TabIndex = 1;
this.label2.Text = "label2";
//
// Form2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form2";
this.Text = "Form2";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
}
}
モデルクラス:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FormToFormExample
{
public class EmployeeModel
{
#region Properties
private Guid _employeeID;
public Guid EmployeeID
{
get { return this._employeeID; }
set { this._employeeID = value; }
}
private string _name;
public string Name
{
get { return this._name; }
set { this._name = value; }
}
#endregion
#region Constructors
public EmployeeModel()
{
this._employeeID = Guid.NewGuid();
}
public EmployeeModel(string name)
: this()
{
this._name = name;
}
#endregion
}
}
フォーム 1 ソース:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FormToFormExample
{
public partial class Form1 : Form
{
#region Constructors
public Form1()
{
InitializeComponent();
Initialize();
BindComponents();
}
#endregion
#region Methods
private void BindComponents()
{
this.button1.Click += button1_Click;
}
private void Initialize()
{
this.textBox1.Text = string.Empty;
}
#endregion
#region Events
void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(new EmployeeModel(textBox1.Text));
form2.ShowDialog();
Initialize();
}
#endregion
}
}
フォーム 2 ソース:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FormToFormExample
{
public partial class Form2 : Form
{
EmployeeModel _model;
#region Constructors
public Form2()
{
InitializeComponent();
BindComponents();
}
public Form2(EmployeeModel model)
: this()
{
this._model = model;
}
#endregion
#region Methods
private void BindComponents()
{
this.Load += Form2_Load;
}
private void Initialize()
{
this.label1.Text = this._model.EmployeeID.ToString();
this.label2.Text = this._model.Name;
}
#endregion
#region Events
void Form2_Load(object sender, EventArgs e)
{
Initialize();
}
#endregion
}
}
プログラム:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FormToFormExample
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}