我有一个包含显示记录的子表单的表单,用户可以重新排列该子表单并保存其首选项。这意味着他们可以更改列的宽度,顺序,隐藏列等,并随时保存其更改,并在下次加载表单时应用这些更改。这是通过将首选项保存在表中,然后从子表单的Form_Load事件中的表中提取这些首选项来完成的。这一切都很好,但我也尝试添加保存冻结列的功能。我能够跟踪冻结的列数,并且我还能够恢复列的顺序,因此解冻所有列应该是一件简单的事情,然后重新冻结前X列。
我知道我可以使用' RunCommand acCmdUnfreezeAllColumns'解冻所有列。我也知道我需要把焦点放在表单上,所以在解冻列之前我试着做myForm.setFocus
(其中myForm是对子表单的引用)。这给出了错误"表达式中有一个无效的方法"。我想也许这是因为你无法将焦点设置为具有启用控件的表单,所以我尝试了myForm.Controls(0).SetFocus
。这不会给出错误,并且它似乎根据Screen.ActiveControl
的值将焦点设置为子表单中的第一个单元格(以及在表单加载后单元格具有焦点的事实)。但是,然后我收到错误"命令或操作' UnfreezeAllColumns'现在还没有。"在RunCommand acCmdUnfreezeAllColumns
行。我也想也许我遇到了问题,因为我试图把注意力集中在一个加载事件上,所以我尝试先调用重绘方法,但这并没有任何区别。我考虑解冻设计视图中的所有列,以便我不需要在运行时解冻它们,但用户可能没有保存任何首选项,我希望默认情况下冻结某些列。
我对此缺乏想法。解冻所有列的命令究竟需要发生什么?或者有一种更简单的方法来做到这一点,我错过了吗?该解决方案需要具有足够的通用性,可以处理任何具有任何字段名称的子表单。请注意,我确实有一个用户保存其首选项时存在的字段名称列表,但我无法保证在恢复其首选项时它们仍然存在。
答案 0 :(得分:0)
这通常对我有用:
reductions
然而,有时它失败了,所以我试着重复它:
myForm.SetFocus
RunCommand acCmdUnfreezeAllColumns
这几乎总是奏效,但菜单命令不是100%可靠。