如何确定哪些控件具有焦点,MS Access VBA

问题描述:

问题就在于此。如何确定哪些控件具有焦点,MS Access VBA

我有一个列表框的行来源是改变programmaticaly。如果控件具有焦点,那么在构建行源时我需要使用me.txtSearch.text,否则我需要使用me.txtSearch.value

如何确定哪些控件具有焦点?

Screen.ActiveControl 

是具有焦点

+0

当你在表单之间切换时,每个表单可以没有单独的焦点吗?就像我打开两个窗体一样,每个窗体都有三个文本框,并且我在第一个窗体的第二个文本框中,然后在第二个窗体上打开第三个文本框,它会忘记第一个窗体的位置?我从来没有尝试过,所以idk ... – jcolebrand 2010-08-18 19:39:30

+0

第一个窗体和文本框松散焦点和第二个窗体获取焦点(screen.activeform) – Fionnuala 2010-08-18 19:43:04

+0

〜是啊,我收集,当我点击form2,但当我回去form1 ..谁获得重点? – jcolebrand 2010-08-18 21:30:38

我会这样做,因为我从来没有见过这样的Access API。只需抓住Form.Controls并循环浏览它们。

+0

为什么现在你已经看到它不存在? – 2010-08-20 21:29:13

+0

@ David-W-Fenton ......我认为,对于没有当前顶级窗口状态的表单,这种做法已经不适用。仍然可以选择让每个表单都具有主动控件,但API仅适用于最活跃的表单/控件。 – jcolebrand 2010-08-22 19:54:26

+1

由于Access控件没有窗口句柄,除非他们有焦点,我怀疑你可以找出哪个控件将焦点放在一个本身没有焦点的窗体上(除非你依次选择每个窗体并检查哪个控件有焦点)。我也不确定你为什么想知道这一点,更不用说与原始问题有什么关系。除非你扩展你对这些问题的讨论,否则我看不到你的答案增加了什么价值 - 事实上,这是不正确的,所以你应该加强它的价值,或者删除它来增加信号。噪音比。 – 2010-08-23 19:42:55

我明白你的问题的控制,但你似乎对我是问错了东西。我认为如果你正在改变一个基于输入到文本框中的值的行源,你可以从AfterUpdate of Me!txtSearch来完成,在这种情况下,控件具有焦点,而.Text和.Value是相同。只有在OnChange事件中.Text和Value可能会有所不同。您也可能会发现OldValue和NewValue有用,但它们只能用于绑定控件。

当然,这仅适用于文本框 - 组合框是不同的,因为.Value属性是绑定控件,而.Text属性是第一个显示的列(即,您从中选择的值列表,即自动完成工作的列表)。您不需要使用.Text属性来获取该值。相反,您可以使用Me!cmbSearch.Column(1)(假定列(0)是绑定列并且宽度为零,即隐藏)。

因此,一般来说,我不明白为什么您需要区分.Value和.Text,因为它们在除OnChange之外的所有事件中都是相同的。例外情况是,如果控件是组合框,并且在这种情况下,根本不需要使用.Text,但使用.Column(1)。

如果我猜对了,您正在收集组合框RowSource的WHERE子句的条件,并且您希望编写代码以从您用来收集条件的任何文本框中执行此操作。在这种情况下,控件的.Value就足够了(甚至不需要指定它,因为它是所有绑定的Access控件的默认属性)。不存在这样的情况,即.Text将与.Value不同,您将编写RowSource。

当然,我可能错在任何关于你实际想要做什么的假设上,但是由于你没有解释这一点,我不得不猜测,因为问题本身并不真实是有道理的,并且在这点旁边。也就是说,使用.Text属性没有任何好处,因此不必担心哪个控件具有焦点。