TextBox.TextChanging イベント

定義

テキスト ボックス内のテキストが変更され始めたが、レンダリングされる前に同期的に発生します。

// Register
event_token TextChanging(TypedEventHandler<TextBox, TextBoxTextChangingEventArgs const&> const& handler) const;

// Revoke with event_token
void TextChanging(event_token const* cookie) const;

// Revoke with event_revoker
TextBox::TextChanging_revoker TextChanging(auto_revoke_t, TypedEventHandler<TextBox, TextBoxTextChangingEventArgs const&> const& handler) const;
public event TypedEventHandler<TextBox,TextBoxTextChangingEventArgs> TextChanging;
function onTextChanging(eventArgs) { /* Your code */ }
textBox.addEventListener("textchanging", onTextChanging);
textBox.removeEventListener("textchanging", onTextChanging);
- or -
textBox.ontextchanging = onTextChanging;
Public Custom Event TextChanging As TypedEventHandler(Of TextBox, TextBoxTextChangingEventArgs) 
<TextBox TextChanging="eventhandler"/>

イベントの種類

この例では、TextChanging イベントを処理して、 TextBox の単純なオートコンプリートを実装する方法を示します。

<!-- Text box in MainPage.xaml -->
<TextBox x:Name="textBox" TextChanging="textBox_TextChanging"
         Width="200" Height="32"/>
public sealed partial class MainPage : Page
{
    // Boolean to keep track of whether or not you should ignore the next TextChanged event.  
    // This is needed to support the correct behavior when backspace is tapped.
    public bool m_ignoreNextTextChanged = false;

    // Sample list of strings to use in the autocomplete.
    public string[] m_options = { "microsoft.com", "dev.windows.com", "msn.com", "office.com", "msdn.microsoft.com" };

    public MainPage()
    {
        this.InitializeComponent();
    }

    private void textBox_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
    {
        // Needed for the backspace scenario.
        if (m_ignoreNextTextChanged)
        {
            m_ignoreNextTextChanged = false;
            return;
        }
        // All other scenarios other than the backspace scenario.
        // Do the auto complete.
        else
        {
            string s = textBox.Text;
            if (s.Length > 0)
            {
                for (int i = 0; i < m_options.Length; i++)
                {
                    if (m_options[i].IndexOf(s) >= 0)
                    {
                        if (s == m_options[i])
                            break;

                        textBox.Text = m_options[i];
                        textBox.Select(s.Length, m_options[i].Length - s.Length);
                        break;
                    }
                }
            }
        }
    }

    protected override void OnKeyDown(KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Back
            || e.Key == Windows.System.VirtualKey.Delete)
        {
            m_ignoreNextTextChanged = true;
        }
        base.OnKeyDown(e);
    }
}

注釈

イベント データについては、「 TextBoxTextChangingEventArgs」を参照してください。

TextChanging イベントは、新しいテキストがレンダリングされる前に同期的に発生します。 これに対し、 TextChanged イベントは非同期であり、新しいテキストがレンダリングされた後に発生します。

TextChanging イベントが発生すると、 Text プロパティには新しい値が既に反映されます (ただし、UI ではレンダリングされません)。 通常、このイベントを処理して 、テキスト がレンダリングされる前に Text 値と選択範囲を更新します。 これにより、テキストが迅速にレンダリング、更新、再レンダリングされるときに発生する可能性があるテキストのちらつきを防ぐことができます。

注意

これは同期イベントであり、レイアウト中など、XAML ビジュアル ツリーへの変更が許可されない場合に発生する可能性があります。 したがって、TextChanging イベント ハンドラー内のコードは、主に Text プロパティの検査と更新に制限する必要があります。 ポップアップの表示やビジュアル ツリーからの要素の追加/削除など、他のアクションを実行しようとすると、致命的なエラーが発生し、クラッシュする可能性があります。 これらの他の変更は 、TextChanged イベント ハンドラーで実行するか、別の非同期操作として実行することをお勧めします。

適用対象

こちらもご覧ください