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 に答える