2010-12-28 3 views
0

У меня проблема: Имейте некоторые функции, где я динамически создаю объект TabPage и элемент управления textBox.Textchanged событие для динамического создания текстового поля

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

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

Теперь мне нужно динамически менять имя вкладки, когда я что-то пишу в элементе управления TextBox. У меня есть функция, которая поддерживает изменение содержимого элемента управления TextBox:

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

Это не работает, потому что функция вызова только к объекту TextBox, а не в TextBox и TabPage. Я знаю решение для объектов, созданных статически, но динамически? В течение нескольких часов я не могу найти решение.

Любая помощь была бы очень признательна.

+0

Вы регистрируете TB_TextChanged и показываете код для метода textBox1_TextChanged. Есть несоответствие? Солн Ханс должен работать, но я не уверен, в чем вопрос? –

ответ

2
var box = (TextBox)sender; 
var page = (TabPage)sender.Parent; 
page.Text = box.Text; 
+0

Это сработает .. – Dienekes

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.