在WPF中在运行时创建它后的访问控制

时间:2012-04-19 17:42:28

标签: c# wpf xaml

我在运行时创建了很多文本框然后我想为它们添加值..之后我添加一个按钮来点击它并在文本框中计算所有这些值,但我不知道如何访问这些文本框??

由于

3 个答案:

答案 0 :(得分:1)

你试过FindControl方法吗?

private void Button1_Click(object sender, EventArgs MyEventArgs)
{
  // Find control on page.
  Control myControl1 = FindControl("TextBox2");
  if(myControl1!=null)
  {
     // Get control's parent.
     Control myControl2 = myControl1.Parent;
     Response.Write("Parent of the text box is : " + myControl2.ID);
  }
  else
  {
     Response.Write("Control not found");
  }

}

参考:http://msdn.microsoft.com/en-us/library/system.web.ui.control.findcontrol(v=vs.71).aspx

我可以不时地使用这种方法,只要您知道文本框的名称或者您需要的控制权。

FindControl("textboxnamehere").Text = "This would put this string in the current text box";

答案 1 :(得分:0)

这只是一个示例,让我们假设您将文本框放在堆栈面板中 - 您需要一个容器!,

private void Button_Click(object sender, RoutedEventArgs e)
    {
        var sum = 0.0;
        foreach (var child in stackPanel.Children)
        {
            var textBox = child as TextBox;
            if (textBox == null) continue;
            double value;
            Double.TryParse(textBox.Text, out value);
            sum += value;
        }

        Console.WriteLine(sum);
    }

当然,我假设你知道你可能想要验证输入(使用数字文本块),button.Click + = Button_click;等等。

编辑问题

private void Button_Click(object sender, RoutedEventArgs e)
    {
        var sum = 0.0;
        for (int i = 1; i < grid.Children.Count; i++ )
        {
            var textBox = grid.Children[i] as TextBox;
            if (textBox == null) continue;
            double value;
            Double.TryParse(textBox.Text, out value);
            sum += value;
        }

        Console.WriteLine(sum);
    }

答案 2 :(得分:0)

如果你有一个容器中的TextBox,就像StackPanel一样,你可以这样做......

private void btnCalculate_Click(object sender, EventArgs e)
{
    var total = 0;
    var textboxes = StackPanelParent.Children.OfType<TextBox>();

    foreach (var textbox in textboxes)
    {
         var input = 0;
         int.TryParse(textbox.Text, out input);
         total += input;
    }

    MessageBox.Show(total.ToString());
}