0

我在一个页面上有大约 100 个文本框,每个文本框在数组中都有自己对应的值,每个文本框都有一个方法,当文本框中的值发生更改时调用该方法,并更新数组的相应元素,以反映它已更改为的值。(理论上)

但是,有没有一种方法可以调整以下方法,而不是将其写出 100 次,更改名称"_8_8_TextChanged",并手动更改它更改的值,然后调用 1 个方法由所有文本框,该方法识别哪个文本框调用它,并更新数组中的相关元素?

该方法在下面定义,功能在“Solver.xaml.cs”页面上。

private void _8_8_TextChanged(object sender, TextChangedEventArgs e)
    {
        int number = int.Parse(_8_8.Text);
        if ((number >= 1) && (number <= 9))
        {
            for (int i = 0; i <= 8; i++)
            {
                if (i == (number - 1))
                {
                    content[8, 8, i] = true;
                }
                else
                {
                    content[8, 8, i] = false;
                }
            }
        }
    }

XAML 文本框本身在下面定义,并在“Solver.xaml”页面上提供,为简单起见删除了其样式元素。

<TextBox x:Name="_8_8" TextChanged="_8_8_TextChanged"/>
4

1 回答 1

3

我真的希望你有充分的理由使用这么多的文本框。在任何情况下,您都可以对所有 TextChange 事件使用相同的事件处理程序,如下所示。

所有文本框都将设置为使用相同的处理程序:

<TextBox x:Name="_8_8" TextChanged="_x_y_TextChanged"/>
<TextBox x:Name="_8_9" TextChanged="_x_y_TextChanged"/>

然后,您可以根据发送文本框更新您的数组:

private void _x_y_TextChanged(object sender, TextChangedEventArgs e)
    {
        TextBox tb = (TextBox)sender;

        // use the Name of the textbox to determine x, y value
        string[] tmp_x_y = tb.Name.Split("_");
        // you may have to adjust these indices based on how Split actually
        // does its work.
        int x = int.Parse(tmp_x_y[0]);
        int y = int.Parse(tmp_x_y[1]);

        int number = int.Parse(tb.Text);
        if ((number >= 1) && (number <= 9))
        {
            for (int i = 0; i <= 8; i++)
            {
                if (i == (number - 1))
                {
                    content[x, y, i] = true;
                }
                else
                {
                    content[x, y, i] = false;
                }
            }
        }
    }

我实际上并没有编译上面的代码,但它应该给你一个很好的起点。

于 2012-12-15T16:52:30.867 回答