一个函数用于多个文本框WPF



我有5个文本框,双击即可编辑。

下面是我为一个文本框编写的方法。

private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            txtFirstLctrTime.IsReadOnly = false;
            txtFirstLctrTime.Background = new SolidColorBrush(Colors.White);
            txtFirstLctrTime.Foreground = new SolidColorBrush(Colors.Black);
        }

有没有什么方法可以对所有文本框使用相同的方法,而不是为所有文本框编写不同的方法??我对编程还相当陌生

您可以将此处理程序atach到所有文本框。然后你检查发件人,因为那是你实际点击的文本框:

    private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var textBox = sender as TextBox;
        textBox.IsReadOnly = false;
        textBox.Background = new SolidColorBrush(Colors.White);
        textBox.Foreground = new SolidColorBrush(Colors.Black);
    }

您应该研究MVVM和数据绑定思想,拥有点击处理程序和代码隐藏有其局限性。

将相同的处理程序附加到所有文本框,并使用sender参数获取引发事件的文本框实例:

private void  MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
     TextBox textBox = (TextBox)sender;
    textBox.IsReadOnly = false;
    textBox.Background = new SolidColorBrush(Colors.White);
    textBox.Foreground = new SolidColorBrush(Colors.Black);
}

是的,有一种方法。Sender是一个参数,它可以告诉您是哪个控件触发了此事件。看看下面的例子:

private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
  TextBox tbWhichFiredThisEvent = sender as TextBox;
  if(tbWhichFiredThisEvent != null)
  {
    tbWhichFiredThisEvent.IsReadOnly = false;
    // ... etc.
  }
}

另一个选项是从TextBox继承并在OnDoubleClick方法上实现您的特定行为。

通过这种方式,您可以在不同的视图上拥有此控件,而无需重复代码。

最新更新