Pregunta

Tengo una aplicación WinForms y parece que no puedo acceder al texto de un ToolStripStatusLabel a través de UIAutomation. Microsoft implica que el soporte para StatusStrip s (y presumiblemente elementos dentro de ellos) es limitado, pero esto parece un caso de uso lo suficientemente básico como para que funcione.

El control aparece con ControlType.Edit en UISpy, y parece ser solo un cuadro de texto de solo lectura, sin embargo, su valor es siempre el mismo que su nombre, no su texto.

Las propiedades en UISpy son las siguientes:

AutomationElement
  General Accessibility
    AccessKey:  ""
    AcceleratorKey: ""
    IsKeyboardFocusable:    "False"
    LabeledBy:  "(null)"
    HelpText:   ""

  State
    IsEnabled:  "True"
    HasKeyboardFocus:   "False"

  Identification
    ClassName:  ""
    ControlType:    "ControlType.Edit"
    Culture:    "(null)"
    AutomationId:   "StatusBar.Pane0"
    LocalizedControlType:   "edit"
    Name:   "My Label"
    ProcessId:  "3972 (*****)"
    RuntimeId:  "42 134002 0"
    IsPassword: "False"
    IsControlElement:   "True"
    IsContentElement:   "True"

  Visibility
    BoundingRectangle:  "(9, 273, 79, 17)"
    ClickablePoint: "48,281"
    IsOffscreen:    "False"

ControlPatterns
  GridItem
    Row:    "0"
    Column: "0"
    RowSpan:    "1"
    ColumnSpan: "1"
    ContainingGrid: ""status bar" "statusStrip""

  Value
    Value:  "My Label"
    IsReadOnly: "True"

Básicamente, espero encontrar alguna forma de ir a myLabel.Text = " something " y poder obtener ese valor de alguna manera a través de UIAutomation.

¿Fue útil?

Solución

Establezca la propiedad AccessibleName además de .Text en el control ToolStripStatusLabel . Funciona para mí usando White en un escenario similar:

statusLabel.Text = statusLabel.AccessibleName = " Nuevo valor de estado " ;;

Otros consejos

He tenido que solucionar este problema teniendo dos etiquetas separadas con texto diferente, y mostrando y ocultando la apropiada. Esto es suficiente para mis propósitos (probar con White), pero estoy muy sorprendido de que UIAutomation no muestre el valor del texto, básicamente significa que todo el texto en las barras de estado en las aplicaciones WinForms es inaccesible para los lectores de pantalla.

Nunca he tenido problemas para recuperar el texto de una etiqueta similar a la que usted describe. De hecho, el AutomationId es incluso el mismo en mi aplicación. El hecho de que ControlType se muestre como ControlType.Edit es engañoso. p.ej. lo siguiente funcionará

statusText = (string)automationElement.GetCurrentPropertyValue(ValuePattern.ValueProperty);

Donde automationElement se ha ubicado utilizando un método Find contra ControlType.Edit con un AutomationId de " StatusBar.Pane0 " .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top