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 输入一个值,它也会将该值传递给 Card Number 和 Exp Date。我怎么可能这样做?

4

2 回答 2

4

您可以动态地将事件处理程序添加到您的 Dynamic TextBox'sTextChanged 事件中,并且由于您还使用您的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方法这样做。

IE

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 回答