سؤال

ولدي التطبيق WinForms عناصر، وأنا لا يمكن أن يبدو للوصول إلى نص ToolStripStatusLabel من خلال UIAutomation. مايكروسوفت يعني أن الدعم لStatusStrips (و يفترض البنود في غضون منهم) محدودة، ولكن هذا يبدو وكأنه حالة الأساسية يكفي استخدام أنه يجب أن تعمل.

والتحكم تظهر مع ControlType.Edit في UISpy، ويبدو أن يكون مجرد قراءة فقط مربع النص، ولكن قيمته هو نفسه دائما كما يبدو من اسمها، وليس في النص.

والخصائص في UISpy هي كما يلي:

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"

والأساس، وأنا على أمل لبعض وسيلة للذهاب myLabel.Text = "something" وتكون قادرة على الحصول على تلك القيمة على نحو ما من خلال UIAutomation.

هل كانت مفيدة؟

المحلول

وتعيين الخاصية AccessibleName بالإضافة إلى .Text على السيطرة ToolStripStatusLabel. بالنسبة لي كان يعمل باستخدام الأبيض في سيناريو مماثل:

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

نصائح أخرى

ولقد كان للتغلب على ذلك من خلال وجود اثنين من بطاقات منفصلة مع نص مختلف، وإظهار وإخفاء مناسبة واحدة. وهذا يكفي لأغراض بلدي (اختبار مع الأبيض)، ولكن أنا مندهش جدا أن UIAutomation لا السطح قيمة النص - وهو ما يعني في الأساس عن النص في أشرطة المعلومات في تطبيقات WinForms عناصر غير قابلة للوصول إلى قارئات الشاشة

ولقد كان أبدا مشكلة استرجاع نص التسمية على غرار ما تصفون. في الواقع AutomationId، بل هو نفسه في طلبي. حقيقة أن يظهر ControlType كما ControlType.Edit مضلل. مثلا التالية سوف تعمل

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

وأين كان يوجد automationElement باستخدام أسلوب بحث ضد ControlType.Edit مع AutomationId من "StatusBar.Pane0".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top