C# WINFORM 中不同 Form 要使用相同資料

這一篇紀錄使用 C# 去寫 WINFORM 時使用一個全域 class
讓不同的 Form 可以去共用資料

先新增一個 class 命名為 GlobalSettingClass

1
class GlobalSettingsClass
2
{
3
	internal GlobalSettingsClass()
4
	{
5
	}
6
}

裡面放一些共用的或是不會變動的變數
像是設計某個程式,我知道我的部門不會有異動

1
class GlobalSettingClass
2
{
3
	 
4
	internal Dictionary<string, DepartmentClass> departments { get; set; }
5
	 
6
	internal GlobalSettingsClass()
7
	{
8
		departments=new Dictionary<string, DepartmentClass>();
9
	}
10
	 
11
	//查詢部門並寫到 departments 中
12
	internal void QueryDepartments
13
	{	
14
		//這個部份可以去看 上一篇文章
15
		departments.Add(string,DepartmentClass);
16
	}
17
}

然後在 Program 中
把 GlobalSettingClass 新增一個實體 _gsc
並去執行 _gsc 的 QueryDepartments

1
static class Program
2
{
3
	/// <summary>
4
	/// 應用程式的主要進入點。
5
	/// </summary>
6
	[STAThread]
7
	static void Main()
8
	{
9
		Application.EnableVisualStyles();
10
		Application.SetCompatibleTextRenderingDefault(false);
11
		
12
		//新增一個實體
13
		GlobalSettingClass _gsc = new GlobalSettingClass();
14
		
15
		//執行查詢部門的方法
16
		_gsc.QueryDepartments();
17
		
18
		Application.Run(new MainForm());
19
	}
20
}

這樣子之後我就有一個可以給所有 Form 使用的部門清單了
但是還沒完整
看到 Program 中的這句話
這裡我們還是要傳遞我們 new 出來的 GlobalSettingClass 給 Form

1
Application.Run(new MainForm(_gsc));

在我們的 MainForm 中
也要給建構子加上 GlobalSettingClass 這個參數 不然會出錯
並且還要在 MainForm 中宣告一個 GlobalSettingClass _gsc 但是不用 new
直接使用傳遞過來的 gsc

1
public partial class MainForm : Form
2
{
3
	GlobalSettingClass _gsc;
4
	public MainForm(GlobalSettingClass gsc)
5
	{
6
		InitializeComponent();
7
		this._gsc=gsc;
8
	}
9
}

然後有其他的 Form 時,一樣把 _gsc 傳過去就行了

1
private void InsertForm_Click(object sender, EventArgs e)
2
{
3
	InsertForm insertform=new InsertForm(_gsc);
4
}

這個時候可能會說
還不是要把 gsc 傳來傳去


自己是覺得有時候可能很多的變數有不同的 Form 要使用

但是又不想要去使用 static 修飾詞以及重新查詢或重新設定

所以才會以這個方法去做