【问题标题】:Unfreezing columns in a subform in Access在 Access 中的子窗体中解冻列
【发布时间】:2016-05-20 18:30:26
【问题描述】:

我有一个带有显示记录的子表单的表单,用户可以重新排列该子表单并保存他们的首选项。这意味着他们可以随时更改列的宽度、顺序、隐藏列等并保存更改,并且这些更改会在下次加载表单时应用。这是通过将首选项保存在表中,然后在子表单的 Form_Load 事件中从表中提取这些首选项来完成的。这一切都很好,但我正在尝试添加保存冻结列的功能。我能够跟踪有多少列被冻结,并且我还能够恢复列的顺序,因此解冻所有列然后重新冻结前 X 列应该是一件简单的事情。

我知道我可以使用“RunCommand acCmdUnfreezeAllColumns”来解冻所有列。我也知道我需要将焦点放在表单上,​​所以我尝试在解冻列之前执行myForm.setFocus(其中 myForm 是对子表单的引用)。这会给出错误“表达式中存在无效方法”。我想这可能是因为您无法将焦点设置到启用了控件的表单,所以我尝试了myForm.Controls(0).SetFocus。这不会产生错误,并且它似乎根据Screen.ActiveControl 的值将焦点设置到子表单中的第一个单元格(以及单元格在表单加载后具有焦点的事实)。但是,然后我收到错误“命令或操作‘UnfreezeAllColumns’现在不可用。”在线RunCommand acCmdUnfreezeAllColumns。我还认为我可能遇到了问题,因为我试图专注于加载事件,所以我尝试先调用 repaint 方法,但这没有任何区别。我想过解冻设计视图中的所有列,这样我就不需要在运行时解冻它们,但用户可能没有保存任何首选项,我希望默认冻结一些列。

我对此的想法已经不多了。解冻所有列的命令究竟需要发生什么才能工作?还是有一种我想念的更简单的方法来做到这一点?该解决方案需要足够多才多艺,以处理具有任何字段名称的任何子表单。请注意,当用户保存他们的首选项时,我确实有一个字段名称的列表,但我不能保证当他们的首选项恢复时它们仍然存在。

【问题讨论】:

    标签: ms-access ms-access-2013


    【解决方案1】:

    这通常对我有用:

    myForm.SetFocus 
    RunCommand acCmdUnfreezeAllColumns
    

    但是,有时它会失败,所以我尝试重复它:

    On Error Resume Next
    myForm.SetFocus 
    RunCommand acCmdUnfreezeAllColumns
    If Err.Number <> 0 Then
        myForm.SetFocus 
        RunCommand acCmdUnfreezeAllColumns
    End If
    On Error GoTo 0
    

    这几乎总是有效,但菜单命令并非 100% 可靠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多