详解如何在Sbo Add-on开发中使用Folder控件

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)
                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
                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 = oForm.Items.Add("BState_L", SAPbouiCOM.BoFormItemTypes.it_STATIC)
                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
                    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
                    If i = 1 Then
                        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
                oColumns = oMatrix.Columns
                oCol = oColumns.Add("#", SAPbouiCOM.BoFormItemTypes.it_EDIT)
                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//*****************************************************************************************
                '分解单的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
                oColumns = oMatrix.Columns
                oCol = oColumns.Add("#", SAPbouiCOM.BoFormItemTypes.it_EDIT)
                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//*****************************************************************************************
                '生产单的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
                oColumns = oMatrix.Columns
                oCol = oColumns.Add("#", SAPbouiCOM.BoFormItemTypes.it_EDIT)
                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//*****************************************************************************************
                 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
注意事项:
  在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将被自动选择。

本文转自foresun  51CTO博客,原文链接:http://blog.51cto.com/foresun/44274,如需转载请自行联系原作者
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值