次の方法で共有


XObject.Changing イベント

定義

この XObject またはその子孫が変更される直前に発生します。

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) 

イベントの種類

次の例では、XML ツリーのルート要素にイベント ハンドラーを追加します。 その後、ツリーが変更され、LINQ to XMLによっていくつかのイベントが発生します。

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  

この例を実行すると、次の出力が生成されます。

Changing event raised  
  Sender: Child  
  ObjectChange: Add  
Changed event raised  
  Sender: Child  
  ObjectChange: Add  

注釈

イベントは XML ツリーの変更からのみ発生し、XML ツリーの構築からは発生しません。 イベントを受信する前にイベント ハンドラーをイベントに追加する必要があり、 への参照を取得する前にイベント ハンドラーを XObject追加することはできません。 XML ツリーが構築される前に への XObject 参照を取得することはできません。 つまり、XML ツリーの機能的な構築中は、イベントを受け取りません。

これらのイベントの 1 つ内で XML ツリーを変更する場合は、予期しない結果が発生する可能性があるため、注意が必要です。 たとえば、イベントを Changing 受信し、イベントの処理中にツリーからノードを削除した場合、イベントを Changed 受信しない可能性があります。 イベントが処理されている場合、イベントを受信しているノードを含む XML ツリー以外の XML ツリーを変更することは有効です。変更がイベントが発生した特定のノードに影響を与えない場合は、同じツリーを変更しても有効です。 ただし、イベントを受信するノードを含むツリーの領域を変更した場合、受け取るイベントとツリーへの影響は未定義になります。

適用対象

こちらもご覧ください