【问题标题】:Textchanged event for dynamically create textbox用于动态创建文本框的 Textchanged 事件
【发布时间】:2010-12-28 18:36:56
【问题描述】:

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

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

        TB.TextChanged += new EventHandler(TB_TextChanged);
    }

现在,当我在 TextBox 控件中写入内容时,我需要动态更改 TabPage 名称。我有支持更改 TextBox 控件内容的功能:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        ((TabPage)sender).Text = ((TextBox)sender).Text;
    }

它不起作用,因为函数只调用 TextBox 对象而不是 TextBox 和 TabPage。我知道静态创建的对象的解决方案,但动态?几个小时我找不到解决方案。

任何帮助将不胜感激。

【问题讨论】:

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

标签: c# events textbox dynamic textchanged


【解决方案1】:
var box = (TextBox)sender;
var page = (TabPage)sender.Parent;
page.Text = box.Text;

【讨论】:

    【解决方案2】:

    要获取父 TabPage,可以向上遍历控件层次结构,直到找到它:

    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 方法中引用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多