2

動的に作成された特定のテキストボックスに変更があった場合は、動的に作成された他のテキストボックスに値を入れたいと思います。どうすればこれを行うことができますか?

これが私がテキストボックスを作成した方法です:

for (int x = 0; x < dt.Rows.Count; x++)
        {
            TextBox txt = new TextBox();
            txt.Name = dt.Rows[x]["field_name"].ToString();
    txt.Text = txt.Name;
            txt.Width = 200;
            var margintx = txt.Margin;
            margintx.Bottom = 5;
            txt.Margin = margintx;

            flowLayoutPanelText.Controls.Add(txt);
        }

その出力は次のとおりです。

ここに画像の説明を入力してください

たとえば、Mag Dataに値を入力すると、その値はCardNumberとExpDateにも渡されます。どうすればこれを行うことができますか?

4

2 に答える 2

4

TextBox's動的TextChangedイベントにイベントハンドラーを動的に追加できます。また、Field名前としてTextBox名前を使用しているため、イベント送信者オブジェクトをキャストして、TextBox変更されたものを判別できます。

for (int x = 0; x < dt.Rows.Count; x++)
{
    TextBox txt = new TextBox();
    txt.TextChanged += new EventHandler(txt_TextChanged);
    txt.Name = dt.Rows[x]["field_name"].ToString();
    txt.Text = txt.Name;
    txt.Width = 200;
    var margintx = txt.Margin;
    margintx.Bottom = 5;
    txt.Margin = margintx;
    flowLayoutPanelText.Controls.Add(txt);
}

void txt_TextChanged(object sender, EventArgs e)
{
    TextBox tb = (TextBox)sender;
    if (tb.Name == "Mag Data")
    {
        //Do Stuff Here
    }
}

あなたが抱えている問題は、あなたのNameプロパティにアクセスTextBoxできないことです。つまり、「カード番号」を実行できません。テキストコントロールコレクションで「カード番号」という名前のテキストボックスを検索する必要があります。Controls.Findメソッドを使用できます。そうするために。

すなわち

if (tb.Name == "Mag Data")
{
    Control[] cntrl = Controls.Find("Card Number", true);
    if (cntrl.Length != 0)
    {
        ((TextBox)cntrl[0]).Text = tb.Text;
    }
}
于 2012-12-03T01:49:27.427 に答える
2

テキストボックスにイベントハンドラーを追加します。

txt.TextChanged += (sender, args) => {
    // Logic to update other textboxes
};
于 2012-12-03T01:48:26.827 に答える