【问题标题】:How to select first item in MS Access combobox if form is unbound如果表单未绑定,如何选择 MS Access 组合框中的第一项
【发布时间】:2018-11-15 04:29:51
【问题描述】:

我尝试使用以下命令预选组合框中的第一项:

Private Sub Form_Load()
    Me.ProjectBox = Me.ProjectBox.ItemData(0)
End Sub

但它说 ItemData(0) 为空。我认为这是因为它在查询(行源属性)之前运行以填充组合框。有没有办法在组合框被填充后运行它

【问题讨论】:

  • 我刚刚在我的一个表单上使用未绑定的 ComboBox 尝试了相同的代码,它运行良好,所以至少在我的情况下,RowSource 查询已经执行并且结果已经填充了 ComboBox 的列表。您应该考虑何时以及如何指定 RowSource。是在设计器中设置还是在 Form_Open() 事件中设置,以便在 Form_Load() 事件处理程序期间查询可用?
  • RowSource 查询有多少列以及为 ColumnCountBoundColumn 属性设置了哪些值?还有 ColumnWidths (带有's')属性? ItemData 集合不一定返回显示的值,而是绑定的值。 (即使控件是“未绑定的”,即没有为表单数据指定字段,术语 bound 也用于指示 ComboBox 将返回 RowSource 查询的哪一列。 Value 属性和 ItemData 集合。)发布我提到的所有 ComboBox 属性的值以获得进一步帮助。
  • ColumnCount:2,列宽:0";1",BoundColumn:0。我也尝试在 Form_Load() 中使用它,但出现更多错误,因为尚未加载表单上的任何其他内容。我也已经尝试过重新查询,但这对我没有什么不同。我忘记提到的一件事是,当我在 Form_Load() 中运行 Me.ProjectBox = Me.ProjectBox.ItemData(0) 时,它会阻止 ComboBox 填充任何条目。

标签: forms ms-access combobox


【解决方案1】:

原始代码应该可以正常工作...

Private Sub Form_Load()
    Me.ProjectBox = Me.ProjectBox.ItemData(0)
End Sub

如果在设计器属性表中正确设置了 ComboBox 属性,例如:

RowSource = {query}
ColumnCount = 2     
BoundColumn = 1   
ColumnWidths = 0";1"

特别注意 BoundColumn = 1

online docs for BoundColumnBoundColumn = 0 有一个特殊的含义,即 ComboBox 的值变成了列表索引值(0、1、2...),而不是 RowSource 列的值。请注意,ComboBox.Column(index, row) 等其他属性的索引值是从 0 开始的,而 ComboBox.BoundColumn 第一个 RowSource 列的索引值从 1 开始......令人沮丧的不一致。

【讨论】:

    【解决方案2】:

    您可以重新查询组合框。这将暂停代码直到完成:

    Private Sub Form_Load()
        Me.ProjectBox.Requery
        Me.ProjectBox = Me.ProjectBox.ItemData(0)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多