c# - WPF 如何动态创建文本框并在单击按钮时找到文本框?

标签 c# .net wpf textbox mouseevent

我正在使用以下代码动态创建一个 TextBox 和一个 Button:

Button btnClickMe = new Button();
btnClickMe.Content = "Click Me";
btnClickMe.Name = "btnClickMe";
btnClickMe.Click += new RoutedEventHandler(this.CallMeClick);

someStackPanel.Childern.Add(btnClickMe);

TextBox txtNumber = new TextBox();
txtNumber.Name = "txtNumber";
txtNumber.Text = "1776";

someStackPanel.Childern.Add(txtNumber);

我将点击事件连接到 Click Me 按钮。单击我按钮甚至被正确触发。但是我找不到我动态输入的TextBox

这是我的点击事件:

protected void ClickMeClick(object sender, RoutedEventArgs e)
{
    // Find the phone number
    TextBox txtNumber = this.someStackPanel.FindName("txtNumber") as TextBox;

    if (txtNumber != null)
    {
        string message = string.Format("The number is {0}", txtNumber.Text);

        MessageBox.Show(message);    
    }
    else
    {
        MessageBox.Show("Textbox is null");
    }
}

如何找到 TextBox txtNumber

最佳答案

Josh G 找到了修复此代码的线索:使用 RegisterName()。

这里有三个好处:

  1. 不使用成员变量来保存对动态创建的 TextBox 的引用。
  2. 编译。
  3. 完整代码。

    using System;
    using System.Windows;
    using System.Windows.Controls;
    
    namespace AddControlsDynamically
    {
        public partial class Window1 : Window
        {
            public void Window_Loaded(object sender, RoutedEventArgs e)
            {
                GenerateControls();
            }
            public void GenerateControls()
            {
                Button btnClickMe = new Button();
                btnClickMe.Content = "Click Me";
                btnClickMe.Name = "btnClickMe";
                btnClickMe.Click += new RoutedEventHandler(this.CallMeClick);
                someStackPanel.Children.Add(btnClickMe);
                TextBox txtNumber = new TextBox();
                txtNumber.Name = "txtNumber";
                txtNumber.Text = "1776";
                someStackPanel.Children.Add(txtNumber);
                someStackPanel.RegisterName(txtNumber.Name, txtNumber);
            }
            protected void CallMeClick(object sender, RoutedEventArgs e)
            {
                TextBox txtNumber = (TextBox) this.someStackPanel.FindName("txtNumber");
                string message = string.Format("The number is {0}", txtNumber.Text);
                MessageBox.Show(message);
            }
        }
    }
    

关于c# - WPF 如何动态创建文本框并在单击按钮时找到文本框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/537073/

相关文章:

c# - PRISM + MEF -- 导入 & ImportMany

c# - 泛型警告 T 与其他类型的类型同名

c# - 如何将变量的值添加到 asp :ListItem in a asp:RadioButtonList

c# - 运行 Windows 窗体应用程序的多个实例

wpf - VisualTreeHelper.GetChildren 找不到 TabItem 的子项

wpf - 波浪下划线作为 TextDecoration : what I am doing wrong?

c# - 如何避免 Iterator 方法被重启?

asp.net - 为什么从 VBScript 调用 ASP.NET ASHX 处理程序可以工作,但在 .NET 中却收到 "could not create SSL/TLS secure channel"错误?

c# - 将间接引用的程序集复制到输出目录 - 缺少程序集

c# - 将任何 XML 文档绑定(bind)到 WPF TreeView