如果特定文本框中也有动态创建的更改,我想在其他动态创建的文本框中放置一个值。我怎么可能这样做?
这就是我创建文本框的方式:
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。我怎么可能这样做?
答案 0 :(得分: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
访问,即您无法执行“卡号”。文本您将需要在ControlBox中搜索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;
}
}
答案 1 :(得分:2)
向文本框添加事件处理程序:
txt.TextChanged += (sender, args) => {
// Logic to update other textboxes
};