XObject.Changing Evento
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Erguidos quando este XObject ou qualquer um dos seus descendentes está prestes a mudar.
public:
event EventHandler<System::Xml::Linq::XObjectChangeEventArgs ^> ^ Changing;
public event EventHandler<System.Xml.Linq.XObjectChangeEventArgs> Changing;
member this.Changing : EventHandler<System.Xml.Linq.XObjectChangeEventArgs>
Public Custom Event Changing As EventHandler(Of XObjectChangeEventArgs)
Tipo de Evento
Exemplos
O exemplo seguinte adiciona um gestor de eventos ao elemento raiz de uma árvore XML. Depois modifica a árvore, fazendo com que o LINQ para XML levante alguns eventos.
XElement root = new XElement("Root", "content");
root.Changing += new EventHandler<XObjectChangeEventArgs>(
(sender, cea) =>
{
Console.WriteLine("Changing event raised");
XElement xSender = (XElement)sender;
Console.WriteLine(" Sender: {0}", xSender.Name);
Console.WriteLine(" ObjectChange: {0}", cea.ObjectChange);
}
);
root.Changed += new EventHandler<XObjectChangeEventArgs>(
(sender, cea) =>
{
Console.WriteLine("Changed event raised");
XElement xSender = (XElement)sender;
Console.WriteLine(" Sender: {0}", xSender.Name);
Console.WriteLine(" ObjectChange: {0}", cea.ObjectChange);
}
);
root.Add(new XElement("Child", "child content"));
Module Module1
WithEvents root As XElement = <Root>content</Root>
Sub Main()
root.Add(<Child>child content</Child>)
End Sub
Private Sub root_Changing( _
ByVal sender As Object, _
ByVal e As XObjectChangeEventArgs) _
Handles root.Changing
Dim xSender As XElement = CType(sender, XElement)
Console.WriteLine("Changing event raised")
Console.WriteLine(" Sender: {0}", xSender.Name)
Console.WriteLine(" ObjectChange: {0}", e.ObjectChange)
End Sub
Private Sub root_Changed( _
ByVal sender As Object, _
ByVal e As XObjectChangeEventArgs) _
Handles root.Changed
Dim xSender As XElement = CType(sender, XElement)
Console.WriteLine("Changed event raised")
Console.WriteLine(" Sender: {0}", xSender.Name)
Console.WriteLine(" ObjectChange: {0}", e.ObjectChange)
End Sub
End Module
Este exemplo produz a seguinte saída:
Changing event raised
Sender: Child
ObjectChange: Add
Changed event raised
Sender: Child
ObjectChange: Add
Observações
Os eventos surgem apenas pela modificação de uma árvore XML, não pela construção de uma árvore XML. Tem de adicionar um gestor de eventos a um evento antes de poder receber eventos, e não pode adicionar um gestor de eventos antes de ter uma referência a um XObject. Não consegues obter uma referência para um XObject antes da árvore XML ser construída. Isto significa que, durante a construção funcional de uma árvore XML, não receberá eventos.
Deve ter cuidado ao modificar uma árvore XML dentro de um destes eventos, pois fazer isso pode levar a resultados inesperados. Por exemplo, se receber um Changing evento e, enquanto o evento está a ser processado, remove o nó da árvore, pode não receber o Changed evento. Quando um evento está a ser processado, é válido modificar uma árvore XML diferente daquela que contém o nó que está a receber o evento; É até válido modificar a mesma árvore, desde que as modificações não afetem os nós específicos onde o evento foi gerado. No entanto, se modificar a área da árvore que contém o nó que recebe o evento, os eventos que recebe e o impacto na árvore ficam indefinidos.