按 Enter 时防止移动到下一条记录?
Posted
技术标签:
【中文标题】按 Enter 时防止移动到下一条记录?【英文标题】:Prevent moving to next record when hitting Enter? 【发布时间】:2009-02-12 20:42:15 【问题描述】:我在 Access 2003 中有一个只能处理单个记录的表单。我可以将Cycle
属性设置为Current Record
,但是当我按Enter 时,表单仍会跳转到下一条记录。我的第一个想法是KeyPreview
属性,但我没有看到。我的另一个想法可能是KeyPress
或KeyUp
事件,但我想我会问,以防意外后果。有什么想法吗?
【问题讨论】:
如果您要投反对票并且(我假设是同一个人)投票结束。请评论为什么。我经常被指责为近在咫尺,即使我在这里也看不到问题。 我也没有发现问题。这似乎是一个合法的编程问题。它只需要一个更好的标题——比如在末尾添加“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】:TAB、Alt、PgUP、PgDn、Enter等时刻键> 在添加记录结束时按下(主要在最后一个字段之后),数据库会自动保存您在表单上输入的所有信息并清除字段,以便您输入下一个值。所以发生的情况是数据已保存但表单看起来是空的。
要做的三件事:
-
表单循环属性设置为当前记录。
表单键预览属性设置为是。
在表单的 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# 移动到下一条记录
对使用新的 Kafka 幂等生产者 API 防止重复感到困惑