0

我有这样的问题:有一些函数可以在其中动态创建 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。我知道静态创建的对象的解决方案,但动态?几个小时我找不到解决方案。

非常感激任何的帮助。

4

2 回答 2

2
var box = (TextBox)sender;
var page = (TabPage)sender.Parent;
page.Text = box.Text;
于 2010-12-28T19:07:44.097 回答
1

要获取父 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 方法中引用它。

于 2010-12-28T19:22:28.110 回答