Re: NVDA 2020.2 doesn't read .NET comboboxes

Andy B.



It appears that checking for the ComboBox.dropDown value (true/false) then responding accordingly in the SelectedIndexChanged event, fixes the problem.


In GagesComboBox.SelectedIndexChanged:

If GagesCheckBox.dropDown is false

Check if NVDA is the current screen reader

speak the selected text for each item


This will work for our needs, but the original problem needs fixed in either NVDA or .net.


Sent from Mail for Windows 10


From: Joseph Lee
Sent: Wednesday, August 19, 2020 4:46 PM
Subject: Re: [nvda-devel] NVDA 2020.2 doesn't read .NET comboboxes


Hi all,

Another follow-up: nope, calling the first child of the combo box as “value” won’t work either. As I suspected, defining a UIA element selected event handler inside this custom app module would suffice, along with looking into the solution Andy proposed yesterday.

I’m done.





From: <> On Behalf Of Joseph Lee via
Sent: Wednesday, August 19, 2020 1:36 PM
Subject: Re: [nvda-devel] NVDA 2020.2 doesn't read .NET comboboxes


Hi all,

A parallel discussion is taking place on Program-l (located at Freelists).

Based on further tests, I think these combo boxes may need to be rewritten or an NVDA specific workaround may need to be written:

  1. It does ship with value pattern. Yet when trying to locate the value for this combo box, COM pointer (for UIA selection pattern) returns NULL (0x0).
  2. Telling NVDA to treat them as combo box without value pattern won't work either due to the above NULL pointer issue.
  3. Both result in NULL pointer access error (COM error is thrown).

A possible workaround would be to use a dedicated app module that announces new values whenever UIA element selected event is fired from the child list item object. Unfortunately, it does not resolve a major use case: NVDA will not announce current value when you move focus to these combo boxes. To mitigate this, an overlay class must be defined for the combo box itself that will return the name of the first selected child object as its value.





Join to automatically receive all group messages.