「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.05.19
XML
カテゴリ: C#.NET


WPFで`TextBox`に対して意図的に`LostFocus`イベントを発生させるためには、テキストボックスのフォーカスを他の要素に移す必要があります。これをプログラムから行うには、`FocusManager`を使用して別の要素にフォーカスを設定します。以下に、これを実現するサンプルコードを示します。


### サンプルコード



まず、UIを定義します。ここでは、`TextBox`と別の要素(例えば、`Button`)を配置します。


```xml

<Window x:Class="LostFocusSample.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="200" Width="300">

    <StackPanel>

        <TextBox x:Name="myTextBox" Width="200" Height="30" Margin="10"/>

        <Button Content="Move Focus" Width="100" Height="30" Margin="10" Click="MoveFocusButton_Click"/>

        <TextBlock x:Name="dummyElement" Visibility="Collapsed"/>

    </StackPanel>

</Window>

```


#### Code-behind (C#)

次に、`Button`のクリックイベントでフォーカスを別の要素に移動するコードを実装します。


```csharp

using System.Windows;


namespace LostFocusSample

{

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }


        private void MoveFocusButton_Click(object sender, RoutedEventArgs e)

        {

            // TextBoxのフォーカスを失わせるために、フォーカスをダミーの要素に移動する

            dummyElement.Focus();

        }

    }

}

```


### 説明

- **XAML**:

  - `TextBox`に名前 (`x:Name="myTextBox"`) を設定。

  - `Button`のクリックイベント (`Click="MoveFocusButton_Click"`) を設定。

  - `TextBlock`をダミーの要素として使用し、フォーカスを移動します。`Visibility="Collapsed"`に設定することで、UI上に表示されません。


- **C#**:

  - `MoveFocusButton_Click`メソッドで、`dummyElement.Focus()`を呼び出すことにより、`TextBox`のフォーカスを失わせます。

  - `dummyElement`は、実際には見えない(`Visibility="Collapsed"`)ので、UIには影響しません。


この方法を使用することで、`TextBox`の`LostFocus`イベントを意図的に発生させることができます。`dummyElement`にフォーカスを移すことで、`TextBox`がフォーカスを失い、`LostFocus`イベントがトリガーされます。


### 応用

別の要素にフォーカスを移すだけでなく、特定のロジックを実行したい場合は、`LostFocus`イベントに対してイベントハンドラーを設定し、その中で必要な処理を行うことも可能です。


```csharp

public MainWindow()

{

    InitializeComponent();

    myTextBox.LostFocus += MyTextBox_LostFocus;

}


private void MyTextBox_LostFocus(object sender, RoutedEventArgs e)

{

    // LostFocusイベント時に実行する処理

    MessageBox.Show("TextBox lost focus!");

}

```


このように、`LostFocus`イベントをハンドルし、必要な処理を行うことができます。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.05.19 18:15:59


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: