控制具有相同事件类型的多个文本框

本文关键字:文本 类型 事件 控制 | 更新日期: 2023-09-27 18:30:34

我有一个 C# WPF 窗口,其中有 20 个文本框。 他们没有做任何特别的事情,我想要的只是当我去他们选择文本时。

我知道设置20个事件是公平

private void customerTextBox_GotFocus(object sender, RoutedEventArgs e)
{
    customerTextBox.SelectAll();
}

但我想知道是否有更流畅的东西

private void (genericTextBox)_GotFocus(object sender, RoutedEventArgs e)
{
    (genericTextBox).SelectAll();
}

我可以在其中使用它一次,每个文本框都可以理解该事件

控制具有相同事件类型的多个文本框

您可以使用

sender参数,该参数包含对引发事件的文本框的引用:

private void GenericTextBox_GotFocus(object sender, RoutedEventArgs e)
{
    (sender as TextBox).SelectAll();
}

然后,您可以为所有文本框设置此错误处理程序:

<TextBox x:Name="textBox1" GotFocus="GenericTextBox_GotFocus" />
<TextBox x:Name="textBox2" GotFocus="GenericTextBox_GotFocus" />
<TextBox x:Name="textBox3" GotFocus="GenericTextBox_GotFocus" />
<TextBox x:Name="textBox4" GotFocus="GenericTextBox_GotFocus" />

可以使用"sender"参数为多个文本框编写一个处理程序。
例:

private void textBox_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox textBox = sender as TextBox;
    if (sender == null)
    {
       return;
    }
    textBox.SelectAll();
 }

像在示例中一样创建事件处理程序,然后将文本框的所有 GotFocus 事件指向该处理程序。

你可以像这样使用 RegisterClassHandler 方法:

 EventManager.RegisterClassHandler(typeof(YourClass), TextBox.GotFocusEvent, new RoutedEventHandler((s, e) =>
        {(s as TextBox).SelectAll();};

除了如上所述创建泛型处理程序之外,还可以向窗口的构造函数添加一行代码,这样就不必将 xaml 中的处理程序附加到每个文本框。

this.AddHandler(TextBox.GotFocusEvent, new RoutedEventHandler(TextBox_GotFocus));