Frage

Ich habe eine WinForms -App und kann nicht auf den Text von a zugreifen ToolStripStatusLabel Durch UIAUTOMATION. Microsoft impliziert dass die Unterstützung für StatusStripS (und vermutlich in ihnen) sind begrenzt, aber dies scheint ein grundlegender Anwendungsfall zu sein, damit er funktionieren sollte.

Die Kontrolle zeigt sich mit ControlType.Edit in uispy und scheint nur schreibgeschütztes Textfeld zu sein, aber sein Wert ist immer der gleiche wie sein Name, nicht seinen Text.

Die Eigenschaften in uispy sind wie folgt:

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"

Grundsätzlich hoffe ich auf eine Möglichkeit zu gehen myLabel.Text = "something" und in der Lage sein, diesen Wert irgendwie durch Uiautomation herauszuholen.

War es hilfreich?

Lösung

Setzen Sie die AccessibleName Eigenschaft zusätzlich zu .Text auf der ToolStripStatusLabel Kontrolle. Es funktioniert für mich mit Weiß in einem ähnlichen Szenario:

statusLabel.Text = statusLabel.AccessibleName = "New status value";

Andere Tipps

Ich musste dies umgehen, indem ich zwei separate Etiketten mit unterschiedlichem Text habe und den entsprechenden Zeigen und Verstecken zeigte. Dies reicht für meine Zwecke aus (Tests mit Weiß), aber ich bin sehr überrascht, dass UIAUTOMATION den Textwert nicht auffließt - es bedeutet im Grunde, dass alle Text in Statusbalken in WinForms -Anwendungen für Bildschirmleser nicht zugänglich sind.

Ich hatte noch nie ein Problem damit, den Text eines Etiketts zu rufen, das dem ähnlich ist, was Sie beschreiben. In der Tat das AutomationId ist sogar in meiner Bewerbung dasselbe. Die Tatsache, dass ControlType wird als angezeigt ControlType.Edit ist irreführend. zB der folgende wird funktionieren

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

Wo automationElement wurde mit einer Fundmethode gegen gefunden ControlType.Edit mit einem AutomationId von "StatusBar.Pane0".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top