Pergunta

Eu tenho um aplicativo Winforms e não consigo acessar o texto de um ToolStripStatusLabel Através de Uiautomation. Microsoft implica que o apoio para StatusStripS (e presumivelmente itens dentro deles) é limitado, mas isso parece ser um caso de uso básico o suficiente para que funcione.

O controle aparece com ControlType.Edit Em Uispy, e parece ser apenas uma caixa de texto somente leitura, no entanto, seu valor é sempre o mesmo que seu nome, não seu texto.

As propriedades em Uispy são as seguintes:

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"

Basicamente, espero que seja algum caminho para ir myLabel.Text = "something" e ser capaz de obter esse valor de alguma forma através da Uiautomation.

Foi útil?

Solução

Colocou o AccessibleName propriedade além de .Text no ToolStripStatusLabel ao controle. Funciona para mim usando o branco em um cenário semelhante:

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

Outras dicas

Eu tive que contornar isso tendo dois rótulos separados com texto diferente e mostrando e escondendo o apropriado. Isso é suficiente para meus propósitos (testando com branco), mas estou muito surpreso que o uiautomation não tenha superado o valor do texto - basicamente significa que todo o texto nas barras de status nos aplicativos Winforms é inacessível para os leitores de tela.

Nunca tive problemas para recuperar o texto de um rótulo semelhante ao que você descreve. De fato AutomationId é mesmo o mesmo no meu aplicativo. O fato de que ControlType é mostrado como ControlType.Edit é enganoso. por exemplo, o seguinte funcionará

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

Onde automationElement foi localizado usando um método de localização contra ControlType.Edit com um AutomationId do "StatusBar.Pane0".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top