2012-05-23 27 views
7

Tôi muốn thiết lập một văn bản trên một yếu tố textfield/hộp với Mircosoft UI Automation khuôn khổ, có nghĩa là trên một AutomationElement từ ControlType.Edit hay ControlType.Document.bộ văn bản trên textfield/hộp với khuôn khổ tự động và nhận được sự kiện thay đổi

Hiện nay tôi đang sử dụng TextPattern để có được văn bản từ một trong những AutomationElements:

TextPattern tp = (TextPattern)element.GetCurrentPattern(TextPattern.Pattern); 
string text = tp.DocumentRange.GetText(-1).Trim(); 

Nhưng bây giờ tôi muốn thiết lập một văn bản mới trong AutomationElement. Tôi không thể tìm thấy phương pháp này trong lớp TextPattern. Vì vậy, tôi đang cố gắng để sử dụng ValuePattern nhưng tôi không chắc chắn nếu đó là đúng cách để làm điều đó:

ValuePattern value = element.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern; 
value.SetValue(insertText); 

Có một cách khác để thiết lập các giá trị văn bản?

Một câu hỏi khác là làm thế nào tôi có thể nhận được sự kiện khi văn bản được thay đổi trên thành phần Edit/Document? Tôi cố gắng để sử dụng TextChangedEvent nhưng tôi không nhận được bất kỳ sự kiện phát sinh khi thay đổi văn bản:

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"); 
} 

Trả lời

6

Bạn có thể sử dụng ValuePatern, đó là cách để làm điều đó. Từ mã của riêng tôi:

ValuePattern etb = EditableTextBox.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern; 
etb.SetValue("test"); 

Bạn có thể đăng ký để Event sử dụng:

var myEventHandler= 
      new AutomationEventHandler(handler); 

Automation.AddAutomationEventHandler(
    SelectionItemPattern.ElementSelectedEvent, // In your case you might want to use another pattern 
    targetApp, 
    TreeScope.Descendants, 
    myEventHandler); 

handler phương pháp:

private void handler(object src, AutomationEventArgs e) {...} 

Ngoài ra còn có một AutomationPropertyChangedEventHandler (sử dụng Automation.AddAutomationPropertyChangedEventHandler(...) trong trường hợp này) có thể hữu ích.

Dựa trên điều này sample từ MSDN.

Các vấn đề liên quan