需要将多个文本框的TextBox_LostFocus的重复代码缩减为一个函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要将多个文本框的TextBox_LostFocus的重复代码缩减为一个函数相关的知识,希望对你有一定的参考价值。

我有一个包含多个文本框的xaml页面。对于每个文本框,都有一个TextBox_LostFocus事件处理程序,它处理文本框的内容。对于大多数文本框来说都是一样的。如何整理代码,以便我不必为所有文本框LostFocus事件函数编写相同的代码。

private void TextBox1_LostFocus(object sender, 
                     Windows.UI.Xaml.RoutedEventArgs e)
        {
            if (TextBox1.Text != "")
            {
                feet = FeetConversion(TextBox1.Text.Trim());
                TextBox1.Text = ConvertDecimalToFraction(feet);
            }
        }

private void TextBox2_LostFocus(object sender, 
                     Windows.UI.Xaml.RoutedEventArgs e)
      {
            if (TextBox2.Text != "")
            {
                feet = FeetConversion(TextBox2.Text.Trim());
                TextBox2.Text = ConvertDecimalToFraction(feet);
            }
        }
答案

您可以使所有TextBox订阅相同的一个处理程序方法。然后,您可以区分事件处理程序方法中的不同文本框并获取其文本。

我做了一个简单的代码示例。 XAML如下所示:

<Grid>
    <StackPanel x:Name="stackpanel">
        <TextBox></TextBox>
        <TextBox></TextBox>
        <TextBox></TextBox>
        <TextBox></TextBox>
        <TextBox></TextBox>
        <TextBox></TextBox>
    </StackPanel>
</Grid>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    foreach (var control in stackpanel.Children)
    {
        if (control is TextBox)
        {
            TextBox textBox = control as TextBox;
            textBox.LostFocus += TextBox_LostFocus;
        }
    }
}

private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
    TextBox textBox = sender as TextBox;
    if (textBox != null)
    {
        if (textBox.Text !="")
        {
            feet = FeetConversion(textBox.Text.Trim());
            textBox.Text = ConvertDecimalToFraction(feet);
        }
    }
}

以上是关于需要将多个文本框的TextBox_LostFocus的重复代码缩减为一个函数的主要内容,如果未能解决你的问题,请参考以下文章