SmFormCollection是一個(gè)SmForm的集合,可以通過此類來(lái)維護(hù)一個(gè)SmForm集合。
構(gòu)造函數(shù)
構(gòu)造函數(shù) | 說明 |
SmFormCollection(bool manual=false) | manual表示是否自己來(lái)維護(hù)此集合。如果為True,則需要自己一個(gè)SmForm一個(gè)SmForm地進(jìn)行添加、刪除來(lái)維護(hù)整個(gè)集合,方便自定義使用。如果為False,則表示直接返回當(dāng)前所有用戶窗體的集合。默認(rèn)值為False. |
常用屬性
屬性名稱 | 說明 |
Count | 返回當(dāng)前窗體集合中包含窗體的數(shù)量。 |
Item(索引器) | 通過窗體名稱返回相應(yīng)的窗體。 |
常用方法
方法名稱 | 說明 |
Add(string FormName, SmForm frm) | 添加一個(gè)窗體。通過名稱進(jìn)行窗體維護(hù)。 |
Add(SmForm frm) | 添加一個(gè)窗體。 |
Remove(string FormName) | 移除相應(yīng)名稱的窗體。 |
Clear | 清空所有窗體。 |
Contains(string FormName) | 是否包含指定名稱的Form. |
ReLoadUserForms | 重新加載所有用戶窗體。僅使用在Proj.Forms這樣的場(chǎng)景。其他個(gè)人自定義使用場(chǎng)景可以忽略此方法。 |
GetDropDownForm(string FormName, bool UseDatabaseData = false) | 根據(jù)窗體名稱來(lái)獲得下拉窗體。 |
CreateForm | 根據(jù)完整的類全名來(lái)獲得相應(yīng)窗體對(duì)象。適合從第三方dll中加載創(chuàng)建窗體。 |
GetDropDownForm | 根據(jù)窗體名稱來(lái)獲得下拉窗體。 |
Show | 根據(jù)窗口名稱顯示窗口。 |
GetFormByName | 根據(jù)窗體名稱獲得一個(gè)窗體的引用。此時(shí)窗體只是被創(chuàng)建一個(gè)實(shí)例,并沒有打開。 |
CreateNewFormByName | 根據(jù)窗體名稱獲得一個(gè)窗體的引用。 |
示例:
VB.Net |
'定義一個(gè)自己維護(hù)的窗體集合,這方便自己維護(hù)一個(gè)窗體集合,例如系統(tǒng)中的Proj.OpenedForms Dim frms As New SmFormCollection(True) Dim frm As New SmForm frm.Name="Test" '直接添加窗體,名稱會(huì)取窗體的名稱 frms.Add(frm) frm=Proj.Forms("員工管理") '根據(jù)名稱來(lái)維護(hù)窗體 frms.Add("員工管理",frm) '可以判斷集合中是否包含指定名稱的窗體 If frms.Contains("Test") Then frms.Remove("Test") End If '根據(jù)窗體名稱,到索引器取相應(yīng)的窗體 If frms("員工管理").IsOpened Then Dim intCount As Integer=frms("員工管理").Grids.Count Proj.MsgDebug.Add("窗體中共有{0}個(gè)表。" , intCount) Else '打開方式一 frms.Show("員工管理") '打開方式二 frms("員工管理").Show() End If '以下這些僅適合在Proj.Forms中使用 '如果有新添加窗體了,執(zhí)行下面的語(yǔ)句可以將新增窗體添加到Proj.Forms集合中 Proj.Forms.ReLoadUserForms() 'Show的第二個(gè)參數(shù)表示是否到后臺(tái)加載表。此方法可以保證新增的窗體可以被正常打開。 Proj.Forms.Show("員工管理",True) '打開引用第三方dll中做的基于SmForm做的自定義窗體。 Proj.Forms.CreateForm("sanMuSoft.CS.Winforms.UserThirdPartForm",Path.Combine(Proj.ApplicationPath,"ThirdPartForm.dll")) '打開下拉窗體 Proj.Forms.GetDropDownForm("下拉窗體名稱") '獲得窗體 frm=Proj.Forms.GetFormByName("員工管理") frm.Width=400 frm.Height=600 '以模式窗體打開 frm.ShowDialog() '正常情況下,一個(gè)窗體只能被創(chuàng)建打開一次。這是因?yàn)槲覀兤脚_(tái)里面定位表是通過:窗體名稱——>表名稱來(lái)查找定位的, '如果允許相同名稱的窗體同時(shí)打開的話,那么我們就無(wú)法準(zhǔn)確地定位到指定的表并進(jìn)行處理了。那么我們?nèi)绾螌?shí)現(xiàn) '自定義窗體當(dāng)作模板重復(fù)利用呢?就通過CreateNewFormByName來(lái)忽略窗體名稱重復(fù)創(chuàng)建一個(gè)新的實(shí)例,然后給窗體 '重命名 frm=Proj.Forms.CreateNewFormByName("自定義窗體") '一定記得重命名 frm.Name="新的窗體名稱" frm.ShowType=FormShowType.InDesktopTab frm.ShowByShowType() |
C# |
// 定義一個(gè)自己維護(hù)的窗體集合,這方便自己維護(hù)一個(gè)窗體集合,例如系統(tǒng)中的Proj.OpenedForms SmFormCollection frms = new SmFormCollection(true); SmForm frm = new SmForm(); frm.Name = "Test"; // 直接添加窗體,名稱會(huì)取窗體的名稱 frms.Add(frm); frm = Proj.Forms["員工管理"]; // 根據(jù)名稱來(lái)維護(hù)窗體 frms.Add("員工管理", frm); // 可以判斷集合中是否包含指定名稱的窗體 if (frms.Contains("Test")) frms.Remove("Test"); // 根據(jù)窗體名稱,到索引器取相應(yīng)的窗體 if (frms["員工管理"].IsOpened) { int intCount = frms["員工管理"].Grids.Count; Proj.MsgDebug.Add("窗體中共有{0}個(gè)表。", intCount); } else { // 打開方式一 frms.Show("員工管理"); // 打開方式二 frms["員工管理"].Show(); } // 以下這些僅適合在Proj.Forms中使用 // 如果有新添加窗體了,執(zhí)行下面的語(yǔ)句可以將新增窗體添加到Proj.Forms集合中 Proj.Forms.ReLoadUserForms(); // Show的第二個(gè)參數(shù)表示是否到后臺(tái)加載表。此方法可以保證新增的窗體可以被正常打開。 Proj.Forms.Show("員工管理", true); // 打開引用第三方dll中做的基于SmForm做的自定義窗體。 Proj.Forms.CreateForm("sanMuSoft.CS.Winforms.UserThirdPartForm", Path.Combine(Proj.ApplicationPath, "ThirdPartForm.dll")); // 打開下拉窗體 Proj.Forms.GetDropDownForm("下拉窗體名稱"); // 獲得窗體 frm = Proj.Forms.GetFormByName("員工管理"); frm.Width = 400; frm.Height = 600; // 以模式窗體打開 frm.ShowDialog(); // 正常情況下,一個(gè)窗體只能被創(chuàng)建打開一次。這是因?yàn)槲覀兤脚_(tái)里面定位表是通過:窗體名稱——>表名稱來(lái)查找定位的, // 如果允許相同名稱的窗體同時(shí)打開的話,那么我們就無(wú)法準(zhǔn)確地定位到指定的表并進(jìn)行處理了。那么我們?nèi)绾螌?shí)現(xiàn) // 自定義窗體當(dāng)作模板重復(fù)利用呢?就通過CreateNewFormByName來(lái)忽略窗體名稱重復(fù)創(chuàng)建一個(gè)新的實(shí)例,然后給窗體 // 重命名 frm = Proj.Forms.CreateNewFormByName("自定義窗體"); // 一定記得重命名 frm.Name = "新的窗體名稱"; frm.ShowType = FormShowType.InDesktopTab; frm.ShowByShowType(); |