如何使用Lotus Notes检测到ESC键被按下?

时间:2011-06-22 06:11:27

标签: lotus-notes

当用户按下ESC键时,我需要显示提示。 如何在Lotus Notes客户端中执行此操作?

2 个答案:

答案 0 :(得分:1)

你能详细说明吗?这适用于一个应用程序,一个表单还是整个Lotus客户端?你为什么要禁用esc键?

在Queryclose事件中,您可以获得close事件的句柄。 Continue = false将阻止表单关闭:

Sub Queryclose(Source As Notesuidocument, Continue As Variant)  
  msgbox "the message" 
End Sub

答案 1 :(得分:0)

**原始问题(由主持人)改变了原来的意图,要求在Lotus Notes中检测并忽略ESC键。 **

您需要使用“QueryClose”事件(正如其他人提到的那样),但您如何确定关闭表单的“合法”方式?我们需要一些逻辑来区分实际点击按钮以“合法地”关闭表单的人,以及是否有人点击了窗口栏中的转义键或“X”按钮。

因此,您需要使用2个表单事件和一个操作按钮来执行此操作。

在表单

的QueryOpen事件中
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
    Dim session As New NotesSession
    Call session.SetEnvironmentVar("CloseDoc",0,True)
End Sub

您的QueryClose事件需要看起来像这样

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
    Dim session As New NotesSession
    Dim iCloseDoc As Integer
    iCloseDoc = session.GetEnvironmentValue("CloseDoc", True)
    If iCloseDoc <> 1 Then
        continue = False
    End If
End Sub

你需要在表单上有一个名为“Close”的动作按钮。

@SetEnvironment("CloseDoc";"1");
@PostedCommand([FileCloseWindow])

LotusScript替代方案如下所示

Sub Click(Source As Button)
    Dim ws As New notesUIWorkspace
    Dim session As New NotesSession
    Call session.SetEnvironmentVar("CloseDoc",1,True)
    Call ws.CurrentDocument.Close
End Sub

现在发生了什么事?当您打开表单时,我为“CloseDoc”(QueryOpen事件)设置了一个环境变量。如果用户点击“ESC”键或甚至单击表单上的“X”关闭窗口,则会触发QueryClose事件。

当检测到关闭表单的请求时,将运行QueryClose事件。我检索“CloseDoc”环境变量,在这种情况下仍为0(零)。如果它不等于1则关闭表格将被中止。如果您愿意,可以在那里添加消息框。

现在,用户成功关闭表单的唯一方法是让他们按下“关闭”按钮。首先将CloseDoc环境变量设置为1,然后调用NotesUIDoc.close()。虽然我不是环境变量的忠实粉丝,但由于您能够在不修改当前文档或其他文档的情况下记录用户活动,因此它非常方便。 (这将更加混乱,因为您必须清理临时文档,或者您被迫对文档进行更改,如果用户只有读者访问数据库或当前文档,则无法更改文档)。

这是相对干净的,因为控件是通过离散的环境变量来管理的,该变量不会增加数据库性能的开销,也不会妨碍应用程序的任何其他功能。注释中的一些建议建议使用全局变量而不是环境变量,如果您只使用LotusScript,这非常合适,但如果您混合使用公式和lotusScript,则环境变量对两者都是通用的。但是开发人员要确定哪个。

这是我多年来强迫用户点击特定按钮关闭文档的一种方式,并忽略“ESC”键或“X”按钮,在窗口栏中没有任何恼人的消息,并且没有表现问题。