Установить текст в текстовое поле / текстовое поле с помощью инфраструктуры автоматизации и получить событие изменения
Я хочу установить текст в элементе textfield / textbox с помощью среды автоматизации Mircosoft, что означает AutomationElement
от ControlType.Edit
или же ControlType.Document
,
На данный момент я использую TextPattern
чтобы получить текст от одного из них AutomationElements
:
TextPattern tp = (TextPattern)element.GetCurrentPattern(TextPattern.Pattern);
string text = tp.DocumentRange.GetText(-1).Trim();
Но теперь я хочу установить новый текст в AutomationElement
, Я не могу найти метод для этого в TextPattern
учебный класс. Поэтому я пытаюсь использовать ValuePattern
но я не уверен, что это правильный способ сделать это:
ValuePattern value = element.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;
value.SetValue(insertText);
Есть ли другой способ установить значение текста?
Другой вопрос, как я могу получить событие, когда текст был изменен на Edit
/ Document
элемент? Я пытался использовать TextChangedEvent
но я не получаю никаких событий при изменении текста:
AutomationEventHandler ehTextChanged = new AutomationEventHandler(text_event);
Automation.AddAutomationEventHandler(TextPattern.TextChangedEvent, element, TreeScope.Element, ehTextChanged);
private void text_event(object sender, AutomationEventArgs e)
{
Console.WriteLine("Text changed");
}
1 ответ
Вы можете использовать ValuePatern, это способ сделать это. Из моего собственного кода:
ValuePattern etb = EditableTextBox.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;
etb.SetValue("test");
Вы можете зарегистрироваться на Event
с помощью:
var myEventHandler=
new AutomationEventHandler(handler);
Automation.AddAutomationEventHandler(
SelectionItemPattern.ElementSelectedEvent, // In your case you might want to use another pattern
targetApp,
TreeScope.Descendants,
myEventHandler);
И handler
метод:
private void handler(object src, AutomationEventArgs e) {...}
Также есть AutomationPropertyChangedEventHandler
(использование Automation.AddAutomationPropertyChangedEventHandler(...)
в этом случае), что может быть полезно.
На основании этого образца из MSDN.