Текстовое событие для динамического создания текстового поля - PullRequest
0 голосов
/ 28 декабря 2010

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

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

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

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

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

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

Любая помощь будет наиболее ценной.

Ответы [ 2 ]

2 голосов
/ 28 декабря 2010
var box = (TextBox)sender;
var page = (TabPage)sender.Parent;
page.Text = box.Text;
1 голос
/ 28 декабря 2010

Чтобы получить родительскую 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.

...