2009-06-17 12 views
1

Ich habe eine WinForms App, und ich kann nicht scheinen, den Text eines ToolStripStatusLabel durch UIAutomation zuzugreifen. Microsoft implies, dass die Unterstützung für StatusStrip s (und vermutlich Elemente in ihnen) ist begrenzt, aber das scheint wie ein Grund genug Anwendungsfall, dass es funktionieren sollte.UIAutomation mit ToolStripStatusLabel

Das Steuerelement wird in UISpy mit ControlType.Edit angezeigt und scheint nur ein schreibgeschütztes Textfeld zu sein. Sein Wert ist jedoch immer derselbe wie sein Name, nicht sein Text.

Die Eigenschaften in UISpy sind wie folgt: Grundsätzlich

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" 

, ich bin für irgendwie gehofft, irgendwie durch UIAutomation zu gehen myLabel.Text = "something" und der Lage sein, diesen Wert hinaus.

Antwort

1

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

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

0

Ich musste dies umgehen, indem ich zwei separate Etiketten mit unterschiedlichem Text hatte, und das entsprechende ein- und ausblendete. Dies ist genug für meine Zwecke (Testen mit Weiß), aber ich bin sehr überrascht, dass UIAutomation den Textwert nicht aufdeckt - es bedeutet im Grunde, dass der gesamte Text in Statusleisten in WinForms-Anwendungen für Screenreader nicht zugänglich ist.

0

Ich hatte noch nie ein Problem beim Abrufen des Textes eines Labels, das dem ähnlich ist, was Sie beschreiben. In der Tat ist die AutomationId sogar die gleiche in meiner Anwendung. Die Tatsache, dass ControlType als ControlType.Edit angezeigt wird, ist irreführend. z.B. Folgendes wird

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

arbeiten Wo automationElement lokalisiert wurde eine Find-Methode gegen ControlType.Edit mit einem AutomationId von "StatusBar.Pane0" verwenden.

+0

Ah, interessant. Ich werde das nächste Woche versuchen! Irgendeine Idee, warum es als Bearbeitungssteuerung verfügbar gemacht werden könnte? Das ist für mich in Ordnung, aber es scheint, als wäre es für einen Screenreader irreführend. – Thom

Verwandte Themen