2016-09-27 92 views
2

我一直在试图掀起一个简单的MS-Access任务跟踪应用程序供个人使用。我的基本数据模型是一个任务定义表(我可以定义日常任务)和一个任务结果表(可以跟踪我在某一天执行的任务)。需要表单根据任务类型显示复选框,单选按钮组或列表框

我试图建立一个形式
1)列出了所有的日常任务(由时间 - 日期排序,
每个任务)的属性,并 2)相邻的任务,显示一个小部件这让我将任务标记为完整。

尽管如此,我有三个(并可能增加更多)不同类型的任务:

  • 简单的是/否任务(其中一个复选框控件会工作)
  • 得分,能任务,让我跟踪有多好任务已经完成(一个无线电按钮组适合)以及由几个是/否子任务(为其选择多选列表框可以适用)组成的“复杂”任务。

我已经得到尽可能建立窗体,所以它按期望的顺序列出所有任务,但我100%坚持如何编码(条件)数据输入小部件。虽然我没有单独实现每个小部件的困难,但我的最大努力是只有一个任务列表,只有一个复选框,一个无线电组或者只是列表框。我不知道如何告诉表单“查看”每个任务的类型,并在其旁边显示相应的小部件。

我几乎已经准备好了,只需将所有任务按照固定顺序与相应的窗口小部件一起硬编码到窗体中即可。有没有办法以更优雅的方式实现这一点?

[旁边]我选择MS-Access有点随意,我正在学习MS-Access窗体。如果有人因为选择了错误的工具而感到被卡住了,请随时通知我

+1

您将需要VBA来执行此操作。将所有三个控件添加到同一行(可能会彼此重叠)。将其所有属性设置为“可见=否”。然后编写VBA代码来确定哪些控件应该对每一行都可见。如何做到这一点取决于你的结构。你使用连续的窗体显示打开的任务还是子窗体?我不确定这是不可能的,如果不使用连续的形式,但我经常是错的。添加一个你的表格结构的解释,我相信我们可以帮助它工作。 – MoondogsMaDawg

+0

相关,但不足:http://stackoverflow.com/questions/20669839/make-fields-visible-in-ms-access-form-as-certain-fields-are-completed – MoondogsMaDawg

+1

我正在使用一个子窗体(父=日期,孩子=任务为此日期),但相关的作品(任务列表)是在子窗体内的连续形式。我在数据库设计/建模方面的背景,所以我不会因为没有考虑“可见=否”的角度而殴打自己。但是一旦我读完,我就意识到我在问一个错误的问题:它不是“如何告诉形式展示什么”,而是“如何告诉形式什么不展示”。我的腰带上有一点VBA;我会在今晚尝试一些东西,并在我工作时更新。 – KevinKirkpatrick

回答

2

正如对原始问题的评论中所解决的,似乎主要障碍是连续表单的限制。由于Access将连续表单的每一列视为原子元素,因此很少有选项可用于区分其表示。唯一接近的工具是条件格式,而选择隐藏/显示字段的最接近的方法是使用将它们“伪装”为背景颜色的文本颜色隐藏文本框字段。

此限制导致我潜在的解决方法。

回顾一下目标:在给定的一天内,我想列出一个[表驱动的]任务集。每个任务都有“是/否”,“从N个选项中选择一个”或“从N个选项中选择0到N”选项。根据任务的类型,它应该分别呈现为单个复选框(是/否),单选按钮组(选择一个)或复选框组(选择多个)。

(旁白:我知道,当我键入此,第一类是真正的第三类的子类,但并没有真正的核心问题消失)

所提出的想法:

在表单启动时,可以运行一个查询,它可以准确地确定哪个任务将落入哪个位置。换句话说,在“绘制”今天的任务之前,数据库可以回答哪个任务位于位置1,位置2,依此类推。另外,我可以放心地说,永远不会超过20个任务(尽管任何一天的实际任务数量可能会有所不同)。

这引起了我的疑惑:如果我设计了20个“插槽”的表单,并且在每个插槽中有3个叠加的演示文稿:一个用于是/否任务,一个用于“选择一个”任务,另一个用于“选择一个”为“选择多个”任务。 (总共60个 - 听起来很可怕,但我希望复制/粘贴会来拯救)。

当Access呈现表单时,每个槽将查询当天的“第n个”任务(所以第1个槽将查询第一个任务,第二个槽查找第二个任务,等等)。只有与查询返回的任务类型匹配的演示文稿才会将“可见”选项设置为“是”。因此,如果查询第三个任务的第三个插槽接收到“是/否”种类的任务,则只会显示“是/否”提示。

为什么它的价值,我确实有一个我的应用程序的工作版本(虽然检查&取消选中复选框根据任务被标记为“挑一个”或“选择许多”绝对格栅我)。因此,如果有理由认为这种新方法行不通,那么在我投入任何实际开发时间之前,我很乐意听到它。

+0

这应该可行。当然,它将是一个未绑定的表单,因此每次加载和保存数据都必须进行编码。 - 您可以使用[CreateControl](https://msdn.microsoft.com/en-us/library/office/ff836740.aspx)在设计视图中打开窗体来创建所有这些控件。一定要命名他们,例如'optGrp1' ..'optGrp20',所以你可以循环控制。我强烈建议使用这个,所以如果你发现你想要一个不同的布局(例如4x5而不是5x4)或更多的控件,你可以改变一些常量并让它再次运行。 – Andre

+0

有道理 - 感谢提示; CreateControl听起来比在20x3可能的控件中手动绘制更诱人。这是一个“业余时间”的项目,很可能会在更多的日子里被抽出,但如果解决的话我会更新/接受答案 – KevinKirkpatrick