2012-05-23 6 views
7

Я хочу, чтобы установить текст на текстовом поле/текстовой элемент с UI Automation рамками 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"); 
} 

ответ

6

Вы можете использовать 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(...) в данном случае) что может быть полезно.

Основано на этом sample от MSDN.

Смежные вопросы