Foleder 在B1和其他开发平台中很普通,是一种容器性控件,也叫Tab页。不过,Folder在B1中使用的频率更加频繁。因此,虽然Folder控件对于软件的功能不产生实质性影响,也觉得有必要对其进行阐述分析,以帮助初学者更好的领会Folder的效能,少走弯路。
使用Folder产生的效能:
1、使窗口的控件具有了分层管理的效果,具有了层次感,更利于操作者理解控件的使用。
2、使用Folder,扩充了窗口的容量,我们知道,通过ScrollBar可以无限在窗口中添加控件,但Scrollbar实际操作起来不方便,需要来回拖动ScrollBar,而Folder则解决了此问题。
和Folder配合使用的控件和属性(其他控件):
1、使用Folder时,我们最好使用RectAngle,如果说Folder是其他功能性控件的容器,那么RectAngle便是Folder的容器,它使Folder和里面的功能性控件看起来具有了一种边界。当然,在Folder的使用中,RectAngle不是必须的,但建议配合使用。
2、使用Folder必须使用其他控件的Pane和Level属性,否则,Folder的使用是没有意义的。
在什么请况下使用Folder:
1、要对窗口的功能性控件按其内容进行分类安排界面时,可使用Folder,例子:B1中的库存--〉物料主数据
2、所进行的操作在业务流程上具有前后步骤时,可使用Folder,并且效果非常的好,使业务流程看上去更紧密。尤其是使用在分析调度一类的窗体。
3、要扩充窗口内容,可使用Folder,其实这点也包含了第一点谈到的条件。
Folder使用的代码例子:
1、生成代码:
' Dim creationPackage
creationPackage = SBO_Application.CreateObject(SAPbouiCOM.BoCreatableObjectType.cot_FormCreationParams)
creationPackage.UniqueID = "SBOP"
creationPackage.BorderStyle = SAPbouiCOM.BoFormBorderStyle.fbs_Sizable
'// Add our form to the SBO application
oForm = SBO_Application.Forms.AddEx(creationPackage)
使用Folder产生的效能:
1、使窗口的控件具有了分层管理的效果,具有了层次感,更利于操作者理解控件的使用。
2、使用Folder,扩充了窗口的容量,我们知道,通过ScrollBar可以无限在窗口中添加控件,但Scrollbar实际操作起来不方便,需要来回拖动ScrollBar,而Folder则解决了此问题。
和Folder配合使用的控件和属性(其他控件):
1、使用Folder时,我们最好使用RectAngle,如果说Folder是其他功能性控件的容器,那么RectAngle便是Folder的容器,它使Folder和里面的功能性控件看起来具有了一种边界。当然,在Folder的使用中,RectAngle不是必须的,但建议配合使用。
2、使用Folder必须使用其他控件的Pane和Level属性,否则,Folder的使用是没有意义的。
在什么请况下使用Folder:
1、要对窗口的功能性控件按其内容进行分类安排界面时,可使用Folder,例子:B1中的库存--〉物料主数据
2、所进行的操作在业务流程上具有前后步骤时,可使用Folder,并且效果非常的好,使业务流程看上去更紧密。尤其是使用在分析调度一类的窗体。
3、要扩充窗口内容,可使用Folder,其实这点也包含了第一点谈到的条件。
Folder使用的代码例子:
1、生成代码:
' Dim creationPackage
creationPackage = SBO_Application.CreateObject(SAPbouiCOM.BoCreatableObjectType.cot_FormCreationParams)
creationPackage.UniqueID = "SBOP"
creationPackage.BorderStyle = SAPbouiCOM.BoFormBorderStyle.fbs_Sizable
'// Add our form to the SBO application
oForm = SBO_Application.Forms.AddEx(creationPackage)
oForm.DataSources.UserDataSources.Add("FolderDS", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1)'生成一个Folder绑定的UserDatasource
'// Set the form properties
oForm.Title = "生产订单分析调度"
oForm.Left = 320
oForm.ClientWidth = 680
oForm.Top = 60
oForm.ClientHeight = 540
oForm.Title = "生产订单分析调度"
oForm.Left = 320
oForm.ClientWidth = 680
oForm.Top = 60
oForm.ClientHeight = 540
oItem = oForm.Items.Add("Add_B", SAPbouiCOM.BoFormItemTypes.it_BUTTON) '新增按钮
oItem.Left = 60
oItem.Width = 40
oItem.Top = 510
oItem.Height = 19
oButton = oItem.Specific
oButton.Caption = "新增"
'表头信息//**********************************************************************************************************
'//添加调用单据编码
oItem = oForm.Items.Add("PdCCode_C", SAPbouiCOM.BoFormItemTypes.it_COMBO_BOX)
oItem.Left = 100
oItem.Width = 65
oItem.Top = 30
oItem.Height = 14
oComboBox = oItem.Specific
oItem.Left = 60
oItem.Width = 40
oItem.Top = 510
oItem.Height = 19
oButton = oItem.Specific
oButton.Caption = "新增"
'表头信息//**********************************************************************************************************
'//添加调用单据编码
oItem = oForm.Items.Add("PdCCode_C", SAPbouiCOM.BoFormItemTypes.it_COMBO_BOX)
oItem.Left = 100
oItem.Width = 65
oItem.Top = 30
oItem.Height = 14
oComboBox = oItem.Specific
oItem = oForm.Items.Add("BState_L", SAPbouiCOM.BoFormItemTypes.it_STATIC)
oItem.Left = 220
oItem.Width = 65
oItem.Top = 98
oItem.Height = 14
oItem.Left = 220
oItem.Width = 65
oItem.Top = 98
oItem.Height = 14
oItem.LinkTo = "BState_C"
oStaticText = oItem.Specific
oStaticText.Caption = "状态"
'表头信息//**********************************************************************************************************
' Folder和Folder所在矩形框//***********************************************************************************
oItem = oForm.Items.Add("Rect1", SAPbouiCOM.BoFormItemTypes.it_RECTANGLE)
oItem.Left = 20
oItem.Width = 640
oItem.Top = 140
oItem.Height = 360
For i = 1 To 3
oItem = oForm.Items.Add("Folder" & i, SAPbouiCOM.BoFormItemTypes.it_FOLDER)
oItem.Left = (i - 1) * 100 + 20
oItem.Width = 100
oItem.Top = 140
oItem.Height = 360
oItem.FromPane = 0
oItem.ToPane = 0
oFolder = oItem.Specific
oFolder.DataBind.SetBound(True, "", "FolderDS") '此处不可缺少,把Foleder绑定与Datasource
oStaticText = oItem.Specific
oStaticText.Caption = "状态"
'表头信息//**********************************************************************************************************
' Folder和Folder所在矩形框//***********************************************************************************
oItem = oForm.Items.Add("Rect1", SAPbouiCOM.BoFormItemTypes.it_RECTANGLE)
oItem.Left = 20
oItem.Width = 640
oItem.Top = 140
oItem.Height = 360
For i = 1 To 3
oItem = oForm.Items.Add("Folder" & i, SAPbouiCOM.BoFormItemTypes.it_FOLDER)
oItem.Left = (i - 1) * 100 + 20
oItem.Width = 100
oItem.Top = 140
oItem.Height = 360
oItem.FromPane = 0
oItem.ToPane = 0
oFolder = oItem.Specific
oFolder.DataBind.SetBound(True, "", "FolderDS") '此处不可缺少,把Foleder绑定与Datasource
If (i = 1) Then
'// set the caption
oFolder.Caption = "订单"
End If
If (i = 2) Then
'// set the caption
oFolder.Caption = "分解单"
End If
If (i = 3) Then
'// set the caption
oFolder.Caption = "生产单"
End If
'// set the caption
oFolder.Caption = "订单"
End If
If (i = 2) Then
'// set the caption
oFolder.Caption = "分解单"
End If
If (i = 3) Then
'// set the caption
oFolder.Caption = "生产单"
End If
If i = 1 Then
oFolder.Select()
Else
oFolder.GroupWith(("Folder" & i - 1))'把Folder组合,此句不可缺,否则,Folder将被RectAngle覆盖,在窗口不显示,虽然Folder的Pressed事件仍可用
End If
Next
'Folder和Folder所在矩形框//***********************************************************************************
oFolder.Select()
Else
oFolder.GroupWith(("Folder" & i - 1))'把Folder组合,此句不可缺,否则,Folder将被RectAngle覆盖,在窗口不显示,虽然Folder的Pressed事件仍可用
End If
Next
'Folder和Folder所在矩形框//***********************************************************************************
'调用单的Matrix//*****************************************************************************************
'添加Matrix控件
oItem = oForm.Items.Add("PCMatrix", SAPbouiCOM.BoFormItemTypes.it_MATRIX)
oItem.Left = 30
oItem.Width = 620
oItem.Top = 175
oItem.Height = 310
oItem.FromPane = 1 '把Folder1中的控件建立层次管理
oItem.ToPane = 1
oMatrix = oItem.Specific
'添加Matrix控件
oItem = oForm.Items.Add("PCMatrix", SAPbouiCOM.BoFormItemTypes.it_MATRIX)
oItem.Left = 30
oItem.Width = 620
oItem.Top = 175
oItem.Height = 310
oItem.FromPane = 1 '把Folder1中的控件建立层次管理
oItem.ToPane = 1
oMatrix = oItem.Specific
oColumns = oMatrix.Columns
oCol = oColumns.Add("#", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oCol.TitleObject.Caption = "#"
oCol.Editable = False
oCol.Width = 16
oCol.TitleObject.Caption = "#"
oCol.Editable = False
oCol.Width = 16
oCol = oColumns.Add("PCID", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oCol.TitleObject.Caption = "序号"
oCol.Editable = False
oCol.Width = 30
oCol.DataBind.SetBound(True, "", "Code") '绑定自增字段
oMatrix.AutoResizeColumns()
oMatrix.AddRow()
'调用单的Matrix//*****************************************************************************************
oCol.TitleObject.Caption = "序号"
oCol.Editable = False
oCol.Width = 30
oCol.DataBind.SetBound(True, "", "Code") '绑定自增字段
oMatrix.AutoResizeColumns()
oMatrix.AddRow()
'调用单的Matrix//*****************************************************************************************
'分解单的Matrix//*****************************************************************************************
'添加Matrix控件
oItem = oForm.Items.Add("PAMatrix", SAPbouiCOM.BoFormItemTypes.it_MATRIX)
oItem.Left = 30
oItem.Width = 620
oItem.Top = 175
oItem.Height = 310
oItem.FromPane = 2 '把Folder2中的控件建立层次管理
oItem.ToPane = 2
oMatrix = oItem.Specific
'添加Matrix控件
oItem = oForm.Items.Add("PAMatrix", SAPbouiCOM.BoFormItemTypes.it_MATRIX)
oItem.Left = 30
oItem.Width = 620
oItem.Top = 175
oItem.Height = 310
oItem.FromPane = 2 '把Folder2中的控件建立层次管理
oItem.ToPane = 2
oMatrix = oItem.Specific
oColumns = oMatrix.Columns
oCol = oColumns.Add("#", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oCol.TitleObject.Caption = "#"
oCol.Editable = False
oCol.Width = 16
oCol.TitleObject.Caption = "#"
oCol.Editable = False
oCol.Width = 16
oCol = oColumns.Add("PAID", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oCol.TitleObject.Caption = "序号"
oCol.Editable = False
oCol.Width = 30
oCol.DataBind.SetBound(True, "", "ACode") '绑定自增字段
oMatrix.AutoResizeColumns()
oMatrix.AddRow()
'分解单的Matrix//*****************************************************************************************
oCol.TitleObject.Caption = "序号"
oCol.Editable = False
oCol.Width = 30
oCol.DataBind.SetBound(True, "", "ACode") '绑定自增字段
oMatrix.AutoResizeColumns()
oMatrix.AddRow()
'分解单的Matrix//*****************************************************************************************
'生产单的Matrix//*****************************************************************************************
'添加Matrix控件
oItem = oForm.Items.Add("APMatrix", SAPbouiCOM.BoFormItemTypes.it_MATRIX)
oItem.Left = 30
oItem.Width = 620
oItem.Top = 175
oItem.Height = 320
oItem.FromPane = 3'把Folder3中的控件建立层次管理
oItem.ToPane = 3
oMatrix = oItem.Specific
'添加Matrix控件
oItem = oForm.Items.Add("APMatrix", SAPbouiCOM.BoFormItemTypes.it_MATRIX)
oItem.Left = 30
oItem.Width = 620
oItem.Top = 175
oItem.Height = 320
oItem.FromPane = 3'把Folder3中的控件建立层次管理
oItem.ToPane = 3
oMatrix = oItem.Specific
oColumns = oMatrix.Columns
oCol = oColumns.Add("#", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oCol.TitleObject.Caption = "#"
oCol.Editable = False
oCol.Width = 16
oCol.TitleObject.Caption = "#"
oCol.Editable = False
oCol.Width = 16
oCol = oColumns.Add("PAID", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oCol.TitleObject.Caption = "序号"
oCol.Editable = False
oCol.Width = 30
oCol.DataBind.SetBound(True, "", "APCode") '绑定自增字段
oMatrix.AutoResizeColumns()
oMatrix.AddRow()
'生产订单工序分解单的Matrix//*****************************************************************************************
oCol.TitleObject.Caption = "序号"
oCol.Editable = False
oCol.Width = 30
oCol.DataBind.SetBound(True, "", "APCode") '绑定自增字段
oMatrix.AutoResizeColumns()
oMatrix.AddRow()
'生产订单工序分解单的Matrix//*****************************************************************************************
oForm.Visible = True
If (MenuString = "OWPAna") Then '分解单菜单
oFolder = oForm.Items.Item("Folder1").Specific
oFolder.Select()
oForm.PaneLevel = 1 '分层显示,显示层次1
End If
If (MenuString = "Orduction") Then
oForm.Items.Item("Folder3").Specific.Select()
oForm.PaneLevel = 3 '分层显示,显示层次3
End If
2、Folder关联事件的触发
Public Sub SBO_Application_ItemEvent(ByVal FormUID As String, ByRef pVal As SAPbouiCOM.ItemEvent, ByRef BubbleEvent As Boolean) Handles SBO_Application.ItemEvent
'窗口操作
If ((pVal.FormUID = "SBOdCall") And (pVal.BeforeAction = False)) Then '事件发生在路线窗口
oForm = SBO_Application.Forms.Item(FormUID)
Select Case pVal.EventType
Case SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED
'Case et_ITEM_PRESSED 单击folder事件
If (pVal.ItemUID = "Folder1") Then
oForm.PaneLevel = 1
End If
If (pVal.ItemUID = "Folder2") Then
oForm.PaneLevel = 2
End If
If (pVal.ItemUID = "Folder3") Then
oForm.PaneLevel = 3
End If
Case SAPbouiCOM.BoEventTypes.et_FORM_CLOSE
oForm.PaneLevel = 0
System.Windows.Forms.Application.Exit()
End Select
End If
End Sub
If (MenuString = "OWPAna") Then '分解单菜单
oFolder = oForm.Items.Item("Folder1").Specific
oFolder.Select()
oForm.PaneLevel = 1 '分层显示,显示层次1
End If
If (MenuString = "Orduction") Then
oForm.Items.Item("Folder3").Specific.Select()
oForm.PaneLevel = 3 '分层显示,显示层次3
End If
2、Folder关联事件的触发
Public Sub SBO_Application_ItemEvent(ByVal FormUID As String, ByRef pVal As SAPbouiCOM.ItemEvent, ByRef BubbleEvent As Boolean) Handles SBO_Application.ItemEvent
'窗口操作
If ((pVal.FormUID = "SBOdCall") And (pVal.BeforeAction = False)) Then '事件发生在路线窗口
oForm = SBO_Application.Forms.Item(FormUID)
Select Case pVal.EventType
Case SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED
'Case et_ITEM_PRESSED 单击folder事件
If (pVal.ItemUID = "Folder1") Then
oForm.PaneLevel = 1
End If
If (pVal.ItemUID = "Folder2") Then
oForm.PaneLevel = 2
End If
If (pVal.ItemUID = "Folder3") Then
oForm.PaneLevel = 3
End If
Case SAPbouiCOM.BoEventTypes.et_FORM_CLOSE
oForm.PaneLevel = 0
System.Windows.Forms.Application.Exit()
End Select
End If
End Sub
注意事项:
在Folder使用中
1、oForm.DataSources.UserDataSources.Add("FolderDS", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1)
oFolder.DataBind.SetBound(True, "", "FolderDS")
这两条语句不可缺,否则,Folder的Press事件发生后,不能触发Folder的Select事件,也就是Folder不能被选中
2、如果Folder和RectAngle组合使用,
If i = 1 Then
oFolder.Select()
Else
oFolder.GroupWith(("Folder" & i - 1))
End If
此代码不可缺,否则Folder将被RectAngle覆盖,在窗口显示不出来
3、Folder的Press事件发生后,不再需要加上oFolder.Select()语句,被单击的Folder将被自动选择。
在Folder使用中
1、oForm.DataSources.UserDataSources.Add("FolderDS", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 1)
oFolder.DataBind.SetBound(True, "", "FolderDS")
这两条语句不可缺,否则,Folder的Press事件发生后,不能触发Folder的Select事件,也就是Folder不能被选中
2、如果Folder和RectAngle组合使用,
If i = 1 Then
oFolder.Select()
Else
oFolder.GroupWith(("Folder" & i - 1))
End If
此代码不可缺,否则Folder将被RectAngle覆盖,在窗口显示不出来
3、Folder的Press事件发生后,不再需要加上oFolder.Select()语句,被单击的Folder将被自动选择。