2012-05-23 20 views
7

voglio impostare un testo su un elemento textfield/casella di testo con il Mircosoft UI Automation quadro, che significa una AutomationElement dal ControlType.Edit o ControlType.Document.testo Set sul campo di testo/casella di testo con il framework per l'automazione e ottenere l'evento di modifica

Al momento sto usando la TextPattern per ottenere il testo da uno di questi AutomationElements:

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

Ma ora voglio impostare un nuovo testo nel AutomationElement. Non riesco a trovare un metodo per questo nella classe TextPattern. Così sto cercando di utilizzare il ValuePattern ma non sono sicuro se questo è il modo giusto per farlo:

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

C'è un altro modo per impostare il valore di testo?

Un'altra domanda è: come posso ottenere un evento quando il testo è stato modificato su un elemento Edit/Document? Ho provato ad usare il TextChangedEvent ma non ottengo alcun evento licenziato quando si cambia il testo:

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

risposta

6

È possibile utilizzare il ValuePatern, è il modo per farlo. Dal mio proprio codice:

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

è possibile registrarsi per Event utilizzando:

var myEventHandler= 
      new AutomationEventHandler(handler); 

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

E il metodo handler:

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

C'è anche un AutomationPropertyChangedEventHandler (uso Automation.AddAutomationPropertyChangedEventHandler(...) in questo caso) può essere utile

Basato su questo sample da MSDN.

Problemi correlati