這一篇紀錄使用 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 | [ ] |
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 修飾詞以及重新查詢或重新設定
所以才會以這個方法去做