It should be simple, but apparently no one knows: If I add a Label
control to my Windows Forms based dialog, and I want this label to be read by JAWS, how would I achieve that?
It works fine using the AccessibleDescription
for other controls like buttons, but it doesn't work with labels. Even MS does not quite seem to know. I also asked FreedomScientific, but they just gave me some kind of default answer like
- Check www.microsoft.com/enable
- Read the JAWS help file
- Make use of JAWS scripting (I don't want to directly control JAWS though)
- Addresses of companies who provide services for app customisation
All not very helpful.
By default JAWS never reads label's text value if it is lying all alone on the whole form. But in general it is not that of a common scenario. So if you have other controls as well on the form like checkbox, option button, text box etc (along with the label) for which tabStop property can be set from properties window then this solution will work. Add a group box on the form and place the label and any other control focus-able control inside the group box. Set the tab stop property of the focus-able control to True. Now when application starts and the moment focus reaches inside the group box because of the tab stoppable control whose tabStop property is set to true, JAWS will read the text of the label.
There is another concept of virtualizing a window in JAWS for which some scripting is required but it is seldom used and it is not the defacto and standard way which can be easily used by end users.
Edit 1: Other option is to use a text box instead of a label. A text box is focus-able control. Now obvious ask would be that how would a text box look like a label. Set following two properties to make that happen :
Edit 2: You can also think of a tool tip. Settings in JAWS can be enabled to read tool tip of a control. So if there is a pair of label and text box control representing some field then you can add tool-tip to your text box which can be read by JAWS.
I use the AccessibleName property and set the TextBox, Button and ComboBox with a name it can read in that property. That seems to work for most things. I cannot get it to read labels yet. If a label displays dynamic data I would suggest changing the dynamic portion of the label, whole or part, to a TextBox, editable or not, and setting its Accessibility name. When it gets tabbed to or gets focus it should ready the AccessibleName and then the value. So tbAmoundOwed should sound like "Amount Owed Text Box 125.78 dollars" (or something similar depending on using Jaws or another reader.) **** This is still a work in progress. I have not found how to read column headers in a ListView. If you set focus to a row in the ListView you will often need to also follow up by setting the focus to the ListView as well.
I had this issue for my Windows Forms app.
It seems JAWS does not read static screen text automatically.
Pressing "INSERT" + "B" on the keyboard triggered the "Read Current Window" JAWS action - JAWS then read the Label.AccessibleDescription property (as well as other screen details).
So you need to set accessibility properties and the user has to perform JAWS keystrokes to read the labels so far as I can tell.
JAWS doesn't necessarily document using developer terminology: if what you are trying to do is HTML then look at the Navigation Quick Keys for HTML or the JAWS Keystroke for the type of element you are using.
Try using "F" for FORM or "H" for HEADING or INSERT+F5 to see if the list of form fields shows up in the list. There is nothing specific to TITLE as a navigation aid for end-users using JAWS (although reverse engineering how they are 'rendered' by JAWS is a simple trial and error).