Color scheme: Dark
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » troubleshooting » UI Automation findet nur das Access-Formular, nicht das WKL-Steuerelement

UI Automation findet nur das Access-Formular, nicht das WKL-Steuerelement

Umgebung

WKL Forms Object Library in Access-Formularen (alle Releases), abgefragt von einem UI-Automation-Client wie einem Testwerkzeug oder einer Barrierefreiheitsprüfung: AutomationElement.FromPoint über dem Steuerelement oder ein Durchlauf durch die Kindelemente des Formularelements. Microsoft 365 Access, 32 oder 64 Bit.

Ursache

Access stellt ein Formular gegenüber UI Automation als eigenes Element dar und führt die Fenster der ActiveX-Steuerelemente darauf nicht als Kinder dieses Elements auf. FromPoint über einer WklNavBar, einer WklActionBar oder einem WklGrid liefert deshalb das Formular (oder das Access-Hauptfenster), und die Rohansicht des Formulars zeigt kein Kind für das Steuerelement. Das Steuerelement fehlt nicht: Jedes WKL-Steuerelement mit eigenem Fenster beantwortet UI Automation selbst über dieses Fenster – die Navigationsleiste als Liste mit dem Namen „Navigation“ und einem Element je Eintrag, das Raster als Datenraster mit Zeilen und Zellen, die Befehlsleiste als Symbolleiste.

Eine Sprachausgabe wie die Windows-Sprachausgabe erreicht die Steuerelemente mit der Tastatur (mit Tab in das Steuerelement): Das Steuerelement hat dann den Fokus, und UI Automation meldet das fokussierte Element des Steuerelementfensters.

Lösung

Suchen Sie das Fenster des Steuerelements über sein Fensterhandle, und fragen Sie dieses Fenster an:

  1. Suchen Sie das Fenster des Formulars (OForm; eine Seite in einem Unterformular-Steuerelement ist OFormSub) unterhalb des Access-Hauptfensters Ihres eigenen Access-Prozesses (Application.hWndAccessApp).
  2. Zählen Sie seine untergeordneten Fenster auf (EnumChildWindows) und behalten Sie die sichtbaren, deren Klassenname mit WindowsForms10 beginnt. Ein Steuerelement hat meist zwei gleich große Fenster, den OLE-Host und die Ansicht des Steuerelements; nehmen Sie das innerste.
  3. Rufen Sie AutomationElement.FromHandle mit diesem Handle auf. Unterscheiden Sie mehrere Steuerelemente anhand dessen, was UI Automation meldet, zum Beispiel am Steuerelementtyp List und am Namen „Navigation“.

Access erzeugt das Fenster eines Steuerelements neu, wenn sich seine Breite ändert oder wenn es deaktiviert und wieder aktiviert wird; ermitteln Sie das Handle vor jeder Verwendung neu. Fragen Sie nur Fenster Ihres eigenen Access-Prozesses an, und suchen Sie nie ab AutomationElement.RootElement: Eine solche Suche fragt auch jedes andere Programm auf dem Rechner an, andere Access-Instanzen eingeschlossen.

Verwandte Themen

de/wiki/msaccess/comctl/troubleshooting/ui-automation-finds-only-the-form.txt · Last modified: by Wolfgang van der Stille