Ms access 如何在Access 2000中使组合框只读?

Ms access 如何在Access 2000中使组合框只读?,ms-access,Ms Access,这看起来很简单,但我搞不懂。看起来我想将Locked属性设置为Yes,但这实际上阻止了他们在下拉列表中选择任何内容 当我说readonly时,我的意思是让组合框预先加载值,并强制用户只选择其中一个值,而不能键入自己的值 有什么想法吗?有一个限制列表属性,您应该将其设置为“是”实现这一点的标准方法是将限制列表属性设置为True 用户将能够输入无效文本,但如果他用标签或按Enter键,弹出窗口将显示 您输入的文本不是中的项目 名单 他将被迫从名单中选择一些东西 与VB6、Winforms、.NET等

这看起来很简单,但我搞不懂。看起来我想将Locked属性设置为Yes,但这实际上阻止了他们在下拉列表中选择任何内容

当我说readonly时,我的意思是让组合框预先加载值,并强制用户只选择其中一个值,而不能键入自己的值


有什么想法吗?

有一个限制列表属性,您应该将其设置为“是”

实现这一点的标准方法是将限制列表属性设置为True

用户将能够输入无效文本,但如果他用标签或按Enter键,弹出窗口将显示

您输入的文本不是中的项目 名单

他将被迫从名单中选择一些东西


与VB6、Winforms、.NET等其他地方提供的真正的下拉列表控件相比,它不是很好。您所要求的有两个部分:

a。我的意思是让组合框预先加载值

为此,无需执行任何操作—只需适当地设置行源。要向列表中添加值,您必须做一些工作,但为了防止,您不需要做任何事情

b。以及强制用户仅选择其中一个值而无法 自己打字

正如在其他答案中所解释的,您需要将LimitToList属性设置为TRUE

现在,您将从中得到的错误消息并不是那么好,因此您可能希望将NotInList事件定义为对用户更友好一点。类似这样的事情可能是合适的:

  Private Sub MyCombo_NotInList(NewData As String, Response As Integer)
    MsgBox Chr(34) & NewData & Chr(34) & _
       " is not one of the choices in the list.", _
       vbInformation, "Select from the list"
    Me!MyCombo.Undo
    Response = acDataErrorContinue
  End Sub

如果您想添加到列表中,您也可以在这里处理,但由于您不想添加,您只需将问题告知用户,即保护他们不受神秘的默认错误消息的影响。

您也可以将此代码添加到combobox的按键事件中

KeyAscil = 0

msgbox " please select from list"

这将阻止用户写入combobox并显示消息错误

这通常称为下拉列表,而不是Access中的combobox。事实上,该名称显示了Microsoft开发工具中控件的起源,正如在16位Windows中一样,该功能最初由文本框与列表框组合提供,因此组合框,因为组合框将文本框和列表框组合成了一个控件。Access组合框可能没有您喜欢的默认行为,但它有更多的属性和事件,并且功能更加广泛。Access组合框设计用于必须限制输入并通知用户错误输入的数据库。其他平台不是专门为开发数据库应用程序而设计的,因此它们对如何处理无效输入的要求不一定那么严格。这是Access中的一个功能,而不是一个BUG-最好您有这种行为,因为它适合创建Access的目的。NotInList事件很有趣,值得一提,我为您提供了一个答案。即便如此,只有在用户完成输入后,截获和拒绝无效输入也必须是一个UI缺陷。更好的UI是通过只允许用户从列表中进行选择来提示用户必须从列表中进行选择。如果您希望在AfterUpdate事件之前拦截它,则可以使用OnChange和BeforeUpdate事件进行拦截。OnChange事件不是根据组合框值进行评估的好地方,但是BeforeUpdate事件是,因为在那里您可以预先限定数据并取消更新。我不完全确定这些与NotInList事件相关的顺序。访问点事件是存在处理所有事情的默认值,您可以编写任何代码来覆盖默认行为。