2010-12-28 25 views
0

このような問題があります。 TabPageオブジェクトとテキストボックスコントロールを動的に作成する機能があります。動的にテキストボックスを作成するTextchangedイベント

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オブジェクトではなくテキストボックスとの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メソッドから参照できます。

関連する問題