如何识别哪些控件具有焦点,MS Access VBA

时间:2010-08-18 19:23:15

标签: sql ms-access vba

这个问题说明了一切。

我有一个列表框,其rowsource是以programmaticaly方式更改的。如果控件具有焦点,那么在构建rowsource时我需要使用me.txtSearch.text,否则我需要使用me.txtSearch.value

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

3 个答案:

答案 0 :(得分:4)

 Screen.ActiveControl

是具有焦点的控件

答案 1 :(得分:1)

我理解你的问题,但你似乎在问我错误的事情。我认为如果你根据输入到文本框中的值改变行源,你就可以从我的AfterUpdate中进行操作!txtSearch,在这种情况下,控件有焦点,而.Text和.Value是相同。只有在OnChange事件中,.Text和Value可能会有所不同。您可能还会发现OldValue和NewValue很有用,但这些只能使用绑定控件。

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

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

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

当然,关于你实际上要做什么的任何数量的假设我都错了,但既然你没有解释,我被迫猜测,因为这个问题本身并没有真正做到感觉并且非常接近那一点。也就是说,使用.Text属性没有任何好处,因此无需担心哪个控件具有焦点。

答案 2 :(得分:-1)

我会以愚蠢的方式去做,因为我从来没有见过这样的Access for Access。只需抓住Form.Controls并循环浏览它们。