void _textDocument_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "CurrentSnapshot")
{
//TODO: 新しいスナップショットが作成された時に必要とされるロジックを実行する
}
}
このトピックでは、主要な TextDocument
クラス イベントを紹介し、使用を説明するためのコード スニペットが含まれています。
このトピックは、以下のセクションで構成されます。
TextDocument
のプロパティの値が変更する時は常に PropertyChanged イベントが発生します。
このイベントを処理する時、TextDocument
オブジェクトが「センダー」としてイベント ハンドラーに送信され、PropertyChangedEventArgs オブジェクト “e” には変更したプロパティ名 e.PropertyName が含まれます。
以下のコードは、TextDocument
の CurrentSnapshot が変更した時にロジックを実行するためのイベント ハンドラー設定を示します。
C# の場合:
void _textDocument_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "CurrentSnapshot")
{
//TODO: 新しいスナップショットが作成された時に必要とされるロジックを実行する
}
}
Visual Basic の場合:
Private Sub _textDocument_PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs)
'TODO: 新しいスナップショットが作成された時に必要とされるロジックを実行する
If e.PropertyName = "CurrentSnapshot" Then
End If
End Sub
ドキュメントに適用された変更が TextChanged イベントを発生させます。前後のスナップショットだけでなくすべての変更のリストを公開します。
以下のコード例は TextChanged イベントの処理とドキュメントで行われたすべての変更のループです。
C# の場合:
void _textDocument_TextChanged(object sender, TextChangedEventArgs e)
{
foreach (TextChange tc in e.Changes)
{
//TODO: 行われた変更に基づいてロジックを実行するために
//テキスト変更をループする
}
}
Visual Basic の場合:
Private Sub _textDocument_TextChanged(sender As Object, e As TextChangedEventArgs)
For Each tc As TextChange In e.Changes
'TODO: 行われた変更に基づいてロジックを実行するために
'テキスト変更をループする
Next
End Sub
ドキュメントの変更が適用される前に発生する、TextChanging イベントは Delete、Append、FindReplace などのドキュメント内のテキストを更新するメソッドによってトリガーされます。CanCancel プロジェクトが true を返す場合、このイベントはキャンセル可能です (変更の元が 元に戻すまたはやり直し操作でない限り true を返す)。前後のスナップショットだけでなく変更のリストを公開します。
以下のコード例は TextChanging イベントを処理し、ドキュメントがこの変更から成長するかどうかをチェックします。プログラマによって指定されたシナリオ “someCondition” でイベントをキャンセルします。
C# の場合:
void _textDocument_TextChanging(object sender, TextChangingEventArgs e)
{
if (e.After.Document.CurrentSnapshot.Length > e.Before.Document.CurrentSnapshot.Length)
{
//TODO: ドキュメントが成長する時にあるロジックを実行する
//TODO: ある状況下で、イベントをキャンセルする
if (someCondition == true && e.CanCancel == true)
e.Cancel = true;
}
}
Visual Basic の場合:
Private Sub _textDocument_TextChanging(sender As Object, e As TextChangingEventArgs)
If e.After.Document.CurrentSnapshot.Length > e.Before.Document.CurrentSnapshot.Length Then
'TODO: ドキュメントが成長する時にあるロジックを実行する
'TODO: ある状況下で、イベントをキャンセルする
If someCondition = True AndAlso e.CanCancel = True Then
e.Cancel = True
End If
End If
End Sub
Load() または InitializeText() メソッドは TextLoaded イベントを発生させます。また、テキストを含む TextDocument で言語が変わる時には常にこのイベントは発生します。
以下のトピックでは、このトピックに関連する追加情報を提供しています。