2009-06-17 4 views
1

J'ai une application WinForms, et je n'arrive pas à accéder au texte d'un ToolStripStatusLabel via UIAutomation. Microsoft implies que le support pour StatusStrip s (et probablement des éléments en leur sein) est limité, mais cela semble être un cas d'utilisation assez basique que cela devrait fonctionner. Le contrôle apparaît avec ControlType.Edit dans UISpy, et semble être juste une zone de texte en lecture seule, mais sa valeur est toujours la même que son nom, pas son texte.UIAutomation avec ToolStripStatusLabel

Les propriétés 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" 

Fondamentalement, je suis l'espoir d'une certaine façon d'aller myLabel.Text = "something" et être en mesure d'obtenir cette valeur en quelque sorte par UIAutomation.

Répondre

1

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

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

0

J'ai dû contourner cela en ayant deux étiquettes séparées avec du texte différent, et en montrant et en cachant la bonne. C'est suffisant pour mes besoins (test avec White), mais je suis très surpris que UIAutomation ne fasse pas surface la valeur du texte - cela signifie essentiellement que tout le texte dans les barres d'état des applications WinForms est inaccessible aux lecteurs d'écran.

0

Je n'ai jamais eu de problème pour récupérer le texte d'une étiquette similaire à ce que vous décrivez. En fait, le AutomationId est même le même dans mon application. Le fait que ControlType soit représenté par ControlType.Edit est trompeur. par exemple. ce qui suit travaillera

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

automationElement a été localisé en utilisant une méthode de décision contre ControlType.Edit avec un AutomationId de "StatusBar.Pane0".

+0

Ah, intéressant. Je vais essayer la semaine prochaine! Une idée de pourquoi il pourrait être exposé comme un contrôle d'édition? C'est bien pour moi, mais il semble que ce serait trompeur pour un lecteur d'écran. – Thom

Questions connexes