Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 其他 >
SmFormCollection

SmFormCollection是一个SmForm的集合,可以通过此类来维护一个SmForm集合。

构造函数

 构造函数  说明
 SmFormCollection(bool manual=false)  manual表示是否自己来维护此集合。如果为True,则需要自己一个SmForm一个SmForm地进行添加、删除来维护整个集合,方便自定义使用。如果为False,则表示直接返回当前所有用户窗体的集合。默认值为False.

常用属性

 属性名称  说明
 Count  返回当前窗体集合中包含窗体的数量。
 Item(索引器)  通过窗体名称返回相应的窗体。

常用方法

 方法名称  说明
 Add(string FormName, SmForm frm)  添加一个窗体。通过名称进行窗体维护。
 Add(SmForm frm)  添加一个窗体。
 Remove(string FormName)  移除相应名称的窗体。
 Clear  清空所有窗体。
 Contains(string FormName)  是否包含指定名称的Form.
 ReLoadUserForms  重新加载所有用户窗体。仅使用在Proj.Forms这样的场景。其他个人自定义使用场景可以忽略此方法。
 GetDropDownForm(string FormName, bool UseDatabaseData = false)  根据窗体名称来获得下拉窗体。
 CreateForm  根据完整的类全名来获得相应窗体对象。适合从第三方dll中加载创建窗体。
 GetDropDownForm  根据窗体名称来获得下拉窗体。
 Show  根据窗口名称显示窗口。
 GetFormByName  根据窗体名称获得一个窗体的引用。此时窗体只是被创建一个实例,并没有打开。
 CreateNewFormByName  根据窗体名称获得一个窗体的引用。

示例:

 VB.Net
'定义一个自己维护的窗体集合,这方便自己维护一个窗体集合,例如系统中的Proj.OpenedForms
Dim frms As New SmFormCollection(True)

Dim frm As New SmForm
frm.Name="Test"
'直接添加窗体,名称会取窗体的名称
frms.Add(frm)

frm=Proj.Forms("员工管理")
'根据名称来维护窗体
frms.Add("员工管理",frm)

'可以判断集合中是否包含指定名称的窗体
If frms.Contains("Test") Then
    frms.Remove("Test")
End If

'根据窗体名称,到索引器取相应的窗体
If frms("员工管理").IsOpened Then
    Dim intCount As Integer=frms("员工管理").Grids.Count
    Proj.MsgDebug.Add("窗体中共有{0}个表。" , intCount)
Else
    '打开方式一
    frms.Show("员工管理")
    '打开方式二
    frms("员工管理").Show()
End If

'以下这些仅适合在Proj.Forms中使用
'如果有新添加窗体了,执行下面的语句可以将新增窗体添加到Proj.Forms集合中
Proj.Forms.ReLoadUserForms()
'Show的第二个参数表示是否到后台加载表。此方法可以保证新增的窗体可以被正常打开。
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()

'正常情况下,一个窗体只能被创建打开一次。这是因为我们平台里面定位表是通过:窗体名称——>表名称来查找定位的,
'如果允许相同名称的窗体同时打开的话,那么我们就无法准确地定位到指定的表并进行处理了。那么我们如何实现
'自定义窗体当作模板重复利用呢?就通过CreateNewFormByName来忽略窗体名称重复创建一个新的实例,然后给窗体
'重命名
frm=Proj.Forms.CreateNewFormByName("自定义窗体")
'一定记得重命名
frm.Name="新的窗体名称"
frm.ShowType=FormShowType.InDesktopTab
frm.ShowByShowType()

C#
// 定义一个自己维护的窗体集合,这方便自己维护一个窗体集合,例如系统中的Proj.OpenedForms
SmFormCollection frms = new SmFormCollection(true);

SmForm frm = new SmForm();
frm.Name = "Test";
// 直接添加窗体,名称会取窗体的名称
frms.Add(frm);

frm = Proj.Forms["员工管理"];
// 根据名称来维护窗体
frms.Add("员工管理", frm);

// 可以判断集合中是否包含指定名称的窗体
if (frms.Contains("Test"))
    frms.Remove("Test");

// 根据窗体名称,到索引器取相应的窗体
if (frms["员工管理"].IsOpened)
{
    int intCount = frms["员工管理"].Grids.Count;
    Proj.MsgDebug.Add("窗体中共有{0}个表。", intCount);
}
else
{
    // 打开方式一
    frms.Show("员工管理");
    // 打开方式二
    frms["员工管理"].Show();
}

// 以下这些仅适合在Proj.Forms中使用
// 如果有新添加窗体了,执行下面的语句可以将新增窗体添加到Proj.Forms集合中
Proj.Forms.ReLoadUserForms();
// Show的第二个参数表示是否到后台加载表。此方法可以保证新增的窗体可以被正常打开。
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();

// 正常情况下,一个窗体只能被创建打开一次。这是因为我们平台里面定位表是通过:窗体名称——>表名称来查找定位的,
// 如果允许相同名称的窗体同时打开的话,那么我们就无法准确地定位到指定的表并进行处理了。那么我们如何实现
// 自定义窗体当作模板重复利用呢?就通过CreateNewFormByName来忽略窗体名称重复创建一个新的实例,然后给窗体
// 重命名
frm = Proj.Forms.CreateNewFormByName("自定义窗体");
// 一定记得重命名
frm.Name = "新的窗体名称";
frm.ShowType = FormShowType.InDesktopTab;
frm.ShowByShowType();