按 Enter 时防止移动到下一条记录?

Posted

技术标签:

【中文标题】按 Enter 时防止移动到下一条记录?【英文标题】:Prevent moving to next record when hitting Enter? 【发布时间】:2009-02-12 20:42:15 【问题描述】:

我在 Access 2003 中有一个只能处理单个记录的表单。我可以将Cycle 属性设置为Current Record,但是当我按Enter 时,表单仍会跳转到下一条记录。我的第一个想法是KeyPreview 属性,但我没有看到。我的另一个想法可能是KeyPressKeyUp 事件,但我想我会问,以防意外后果。有什么想法吗?

【问题讨论】:

如果您要投反对票并且(我假设是同一个人)投票结束。请评论为什么。我经常被指责为近在咫尺,即使我在这里也看不到问题。 我也没有发现问题。这似乎是一个合法的编程问题。它只需要一个更好的标题——比如在末尾添加“in Access VBA”。 真的吗?我认为标签就足够了。数据重复通常是一件坏事。 我认为标签的存在是有原因的。我也发布了这个,因为我在谷歌上找不到答案。 “访问”和“进入”太笼统了。 我已经很多年没有使用 Access VBA 了,所以我不愿意把这个作为答案。当我不得不这样做时,我基本上使用了我相信的 OnKeyPress 事件。 【参考方案1】:

Cycle 属性只影响 TAB 键。

控制作为全局属性的 Enter 键的行为。

转到工具/选项 - 键盘选项卡并在“输入后移动”上选择“下一个字段”

您也可以使用 KeyPress 和 KeyDown 事件来捕获 Enter 键,但这需要更多工作。

【讨论】:

有趣的是,我从未想过我的“用户偏好”会影响我的应用程序。幸运的是,我的用户可能不够精明,无法深入研究这些选项。这对我有用。谢谢。 不会影响整个应用程序。如果您只想在某些表单上执行此操作,而不是全部,该怎么办? “下一个字段”不是默认行为吗? 您可能应该让您的应用程序使用 GetOption 检查此选项的设置,如果不是您想要的,请使用 GetOption 进行设置。如果您想将用户的设置恢复为原始设置,您需要缓存原始值并在应用关闭时重置。 Cycle 属性现在可以与 Enter 和 Tab 一起使用。文档没有提到它,但我只是尝试过。【参考方案2】:

这也可以在 vba 中完成。

Application.GetOption "Move After Enter" 'get current setting
Application.SetOption "Move After Enter", 0 'don't move
Application.SetOption "Move After Enter", 1 'Next Field
Application.SetOption "Move After Enter", 2 'Next Record

http://www.pcreview.co.uk/forums/enter-key-moving-next-field-t3454281.html

【讨论】:

【参考方案3】:

TABAltPgUPPgDnEnter等时刻键> 在添加记录结束时按下(主要在最后一个字段之后),数据库会自动保存您在表单上输入的所有信息并清除字段,以便您输入下一个值。所以发生的情况是数据已保存但表单看起来是空的。

要做的三件事:

    表单循环属性设置为当前记录。 表单键预览属性设置为是。

    在表单的 KeyDown 事件中添加如下代码:

    '33 - PgUp; 34 - PgDown; 9 - Tab; 18=Alt; 13=Enter
    
    Select Case KeyCode
    Case 33, 34, 18, 9, 13
    KeyCode = 0    
    Case Else
    'Debug.Print KeyCode, Shift
    End Select
    

    我在网上搜索时发现了这一点,并且不认为代码的功劳/责任,但我不知道我在哪里找到它。为我工作!

【讨论】:

【参考方案4】:

Cycle 属性仅适用于 Tab 键。

您可以选择两种选择。

您可以在 KeyDown/KeyUp/KeyPressed 中捕获 Enter 键 - 或 - 您可以将数据源过滤到您希望他们编辑的一条记录,并禁止通过该表单添加新记录。

【讨论】:

【参考方案5】:

您可以将以下代码添加到您的表单“更新前”事件中。如果用户想移动到下一条记录,它会要求用户保存然后关闭表单,然后才能移动到另一个记录。

  Private Sub Form_BeforeUpdate(Cancel As Integer)
    Select Case MsgBox("Save?", vbYesNo)
      Case vbYes
        DoCmd.Close
      Case vbNo
        Cancel = True
    End Select
  End Sub

【讨论】:

此代码仅在记录已更新时才会触发,因此它根本不能真正解决原始问题。【参考方案6】:

如果您进入文件页面上的访问选项,请转到客户端设置,第一个设置将让您选择按 Enter 键时焦点更改的位置。至少在 Access 2013 中。

【讨论】:

以上是关于按 Enter 时防止移动到下一条记录?的主要内容,如果未能解决你的问题,请参考以下文章

编辑组合框时访问表单不会更新,必须移动到下一条记录

使用 oledbdatareader C# 移动到下一条记录

防止按Enter在Angular4中创建新行

对使用新的 Kafka 幂等生产者 API 防止重复感到困惑

在不同的框中按 Enter 时防止按钮上的 onclick 事件触发

如果数据库中已经存在值,则R跳到下一条记录