代码之家  ›  专栏  ›  技术社区  ›  Icode4food

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

  •  2
  • Icode4food  · 技术社区  · 15 年前

    这个问题说明了一切。

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

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

    3 回复  |  直到 15 年前
        1
  •  4
  •   Fionnuala    15 年前
     Screen.ActiveControl
    

    是有焦点的控件

        2
  •  1
  •   David-W-Fenton    15 年前

    我理解你的问题,但在我看来你问错了。我认为,如果您根据输入到文本框中的值修改行源,那么在更新我之后您就可以这样做了!txtSearch,在这种情况下,控件具有焦点,并且.text和.value是相同的。只有在onchange事件中.text和value可能不同。您可能还会发现oldValue和newValue很有用,尽管它们只适用于绑定控件。

    当然,这只适用于文本框--组合框是不同的,因为.value属性是绑定控件,而.text属性是第一个显示的列(即,从列表中选择的值,自动完成功能的值)。不需要使用.text属性来获取该值。相反,你可以用我!cmbsearch.column(1)(假设column(0)是绑定列,宽度为零,即隐藏)。

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

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

    当然,关于你实际想做什么的任何假设,我都可能是错的,但是由于你没有解释,我不得不猜测,因为这个问题本身是没有意义的,而且与此无关。也就是说,使用.text属性没有好处,因此无需担心哪个控件具有焦点。

        3
  •  -1
  •   jcolebrand    15 年前

    我会这么做,因为我从来没有见过这样的访问API。抓取表单,控制并循环浏览。