C# 动态创建文本框的Textchanged事件

C# 动态创建文本框的Textchanged事件,c#,events,textbox,dynamic,textchanged,C#,Events,Textbox,Dynamic,Textchanged,我有这样的问题: 有一些功能,我可以在上面动态创建TabPage对象和textBox控件 private void Create() { TabPage zakladkaTabControl = createTabPage(); TextBox TB = new TextBox(); TB.TextChanged += new EventHandler(TB_TextChanged); } 现在,当我在TextBox控件中写

我有这样的问题: 有一些功能,我可以在上面动态创建TabPage对象和textBox控件

   private void Create()
   {
        TabPage zakladkaTabControl = createTabPage();
        TextBox TB = new TextBox();

        TB.TextChanged += new EventHandler(TB_TextChanged);
    }
现在,当我在TextBox控件中写入内容时,我需要动态更改TabPage名称。我有一个支持更改文本框控件内容的函数:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        ((TabPage)sender).Text = ((TextBox)sender).Text;
    }
它不起作用,因为函数只调用TextBox对象,而不调用TextBox和TabPage。我知道静态创建对象的解决方案,但动态创建对象?好几个小时我都找不到解决办法


任何帮助都将不胜感激。

要获取父选项卡页面,您可以沿着控件层次结构一直走到找到它为止:

var box = (TextBox)sender;
var page = (TabPage)sender.Parent;
page.Text = box.Text;
private void textBox1_TextChanged(object sender, EventArgs e)
{
    var tb = (TextBox)sender;
    Control ctl = tb.Parent;
    while (ctl != null && !(ctl is TabPage))
    {
        ctl = ctl.Parent;
    }

    if (parent != null)
    {
        var tp = (TabPage)parent;
        // Change the TabPage name here
    }
}

或者,您可以将zakladkaTabControl设置为类的属性,而不是局部变量,以便您可以从textBox1_TextChanged方法引用它。

要获取父选项卡页,您可以在控件层次结构上遍历,直到找到它:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var tb = (TextBox)sender;
    Control ctl = tb.Parent;
    while (ctl != null && !(ctl is TabPage))
    {
        ctl = ctl.Parent;
    }

    if (parent != null)
    {
        var tp = (TabPage)parent;
        // Change the TabPage name here
    }
}

或者,您可以将zakladkaTabControl设置为类的属性而不是局部变量,以便可以从textBox1_TextChanged方法引用它。

您正在注册TB_TextChanged并显示textBox1_TextChanged方法的代码。是否存在不匹配?Hans的Soln应该可以工作,但我不确定到底是什么问题?您正在注册TB_TextChanged并显示textBox1_TextChanged方法的代码。是否存在不匹配?汉斯的索尔应该会工作,但我不确定到底是什么问题?