Question

J'ai une application WinForms et je n'arrive pas à accéder au texte d'un ToolStripStatusLabel via UIAutomation. Microsoft implique que la prise en charge de StatusStrip (et vraisemblablement les éléments qu’ils contiennent) est limité, mais cela semble être un cas d’utilisation assez basique pour que cela fonctionne.

Le contrôle apparaît avec ControlType.Edit dans UISpy et semble n'être qu'une zone de texte en lecture seule. Toutefois, sa valeur est toujours identique à son nom, pas son texte.

Les propriétés dans UISpy sont les suivantes:

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"

En gros, j'espère trouver un moyen d'aller myLabel.Text = "quelque chose" et de pouvoir obtenir cette valeur d'une manière ou d'une autre via UIAutomation.

Était-ce utile?

La solution

Définissez la propriété AccessibleName en plus de .Text sur le contrôle ToolStripStatusLabel . Cela fonctionne pour moi en utilisant White dans un scénario similaire:

statusLabel.Text = statusLabel.AccessibleName = " Nouvelle valeur d'état " ;;

Autres conseils

J'ai dû contourner ce problème en disposant de deux étiquettes distinctes avec un texte différent et en affichant et en masquant celle qui convient. C'est suffisant pour mes besoins (tester avec White), mais je suis très surpris que UIAutomation ne fasse pas apparaître la valeur de texte - cela signifie en gros que tout le texte des barres d'état des applications WinForms est inaccessible aux lecteurs d'écran.

Je n’ai jamais eu de difficulté à récupérer le texte d’une étiquette semblable à ce que vous décrivez. En fait, AutomationId est même identique dans mon application. Le fait que ControlType apparaisse sous la forme ControlType.Edit est trompeur. par exemple. ce qui suit fonctionnera

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

automationElement a été situé à l'aide d'une méthode Find par rapport à ControlType.Edit avec un AutomationId de " StatusBar.Pane0 " .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top