Установить текст в текстовое поле / текстовое поле с помощью инфраструктуры автоматизации и получить событие изменения

Я хочу установить текст в элементе 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.

Другие вопросы по тегам