验证处理程序中的BubbleEvent无效

2020-09-21 23:43发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在尝试验证用户在网格单元格中输入的值。 如果我通过Grid0.Columns.Item(" ColId")。ValidateBefore + = ValidationHandler添加eventHandler,则一切正常。 但是由于某种原因,尽管该事件处理程序仍处于活动状态,但随着时间的流逝,它会丢失。 因此,我尝试将EventHandler添加到SBO_Application.ItemEvent,并在关闭窗体时将其删除。 但是现在BubbleEvent = false对网格行为没有影响(输入了无效值,但用户仍然可以更改单元格焦点)。

先谢谢您!

私有void SBO_Application_ItemEvent(字符串FormUID,ref SAPbouiCOM.ItemEvent pVal,布尔泡泡事件)
         {
             BubbleEvent = true;
             如果
             (
                     pVal.BeforeAction
                 && pVal.ItemUID == Grid0.Item.UniqueID
                 && pVal.FormUID == UIAPIRawForm.UniqueID
                 && pVal.Row> = 0
                 && pVal.ColUID == COLID_VALUE
                 && pVal.EventType == SAPbouiCOM.BoEventTypes.et_VALIDATE
                 && pVal.ItemChanged
             )
             {
                 SetParameter(pVal.Row,out BubbleEvent);
             }
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在尝试验证用户在网格单元格中输入的值。 如果我通过Grid0.Columns.Item(" ColId")。ValidateBefore + = ValidationHandler添加eventHandler,则一切正常。 但是由于某种原因,尽管该事件处理程序仍处于活动状态,但随着时间的流逝,它会丢失。 因此,我尝试将EventHandler添加到SBO_Application.ItemEvent,并在关闭窗体时将其删除。 但是现在BubbleEvent = false对网格行为没有影响(输入了无效值,但用户仍然可以更改单元格焦点)。

先谢谢您!

私有void SBO_Application_ItemEvent(字符串FormUID,ref SAPbouiCOM.ItemEvent pVal,布尔泡泡事件)
         {
             BubbleEvent = true;
             如果
             (
                     pVal.BeforeAction
                 && pVal.ItemUID == Grid0.Item.UniqueID
                 && pVal.FormUID == UIAPIRawForm.UniqueID
                 && pVal.Row> = 0
                 && pVal.ColUID == COLID_VALUE
                 && pVal.EventType == SAPbouiCOM.BoEventTypes.et_VALIDATE
                 && pVal.ItemChanged
             )
             {
                 SetParameter(pVal.Row,out BubbleEvent);
             }
 
付费偷看设置
发送
2条回答
1楼 · 2020-09-22 00:13.采纳回答

你好

 Grid0.Columns.Item(" ColId")。ValidateBefore + = ValidationHandler 

只要Grid(0).Columns.Item(" ColId")保留在内存中,此方法就起作用。
一旦GC收集了该对象,对处理程序的引用将无效。
另外请注意,这可能会导致内存泄漏情况。

要正确处理此事件,您可以选择以下几种方法:

1。 将处理程序添加到Grid0而不是特定的列。
2。 如果要处理特定的列,请将该列声明为变量,然后将处理程序添加到该变量。

请注意,您还需要确保Grid0或Column变量在窗体的整个生命周期中都有效,以便GC不会收集它。

请注意
Edy


谢谢,Edy! 听起来合理。

一周热门 更多>