Domanda

Ho un'app WinForms e non riesco ad accedere al testo di un ToolStripStatusLabel tramite UIAutomation. Microsoft implica che il supporto per StatusStrip s (e presumibilmente oggetti al loro interno) è limitato, ma questo sembra un caso d'uso abbastanza semplice da funzionare.

Il controllo appare con ControlType.Edit in UISpy e sembra essere solo una casella di testo di sola lettura, tuttavia il suo valore è sempre uguale al suo nome, non al suo testo.

Le proprietà in UISpy sono le seguenti:

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"

Fondamentalmente, spero in qualche modo di andare myLabel.Text = " qualcosa " ed essere in grado di ottenere quel valore in qualche modo attraverso UIAutomation.

È stato utile?

Soluzione

Imposta la proprietà AccessibleName oltre a .Text sul controllo ToolStripStatusLabel . Funziona per me usando White in uno scenario simile:

statusLabel.Text = statusLabel.AccessibleName = " Nuovo valore di stato " ;;

Altri suggerimenti

Ho dovuto aggirare questo problema avendo due etichette separate con testo diverso e mostrando e nascondendo quella appropriata. Questo è abbastanza per i miei scopi (test con White), ma sono molto sorpreso che UIAutomation non affronti il ??valore del testo - fondamentalmente significa che tutto il testo nelle barre di stato nelle applicazioni WinForms è inaccessibile agli screen reader.

Non ho mai avuto problemi a recuperare il testo di un'etichetta simile a quello che descrivi. In effetti AutomationId è persino lo stesso nella mia applicazione. Il fatto che ControlType sia mostrato come ControlType.Edit è fuorviante. per esempio. il seguente funzionerà

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

Dove automationElement è stato individuato utilizzando un metodo Find in ControlType.Edit con un AutomationId di " StatusBar.Pane0 " .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top