我有这样的问题: 有一些功能,我动态创建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。我知道静态创建的对象的解决方案,但动态?几个小时我找不到解决方案。
非常感谢任何帮助。
答案 0 :(得分:2)
var box = (TextBox)sender;
var page = (TabPage)sender.Parent;
page.Text = box.Text;
答案 1 :(得分: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方法引用它。