在动态创建的表单中保存用户输入
本文关键字:保存 用户 输入 表单 动态 创建 | 更新日期: 2023-09-27 18:09:40
我试图在动态生成的表单中获得用户在文本框中输入的值。另一种方法加载和解析XML文件,并创建一个对象,该对象对在文件中找到的设置(Server、Port、Title等)具有特定的getter和setter。
动态表单是这样使用标签和文本框创建的。它被设计为只显示来自XML文件的信息,我正在尝试实现一个允许用户在再次将信息保存到文件之前编辑信息的系统。我对保存和编辑XML文件的方法做得很好,但是我不知道如何将任何给定文本框中的输入与表示XML文件中要更改的键的相关标签相关联。
下面是当前的表单实现,其中标签和文本框是作为foreach循环的一部分创建的。我尝试创建文本框。让eventHandler跟踪用户何时完成更改值,但我不知道如何知道它与什么标签相关联。
var sortedSettings = new SortedDictionary<string, string>(theSettings.Settings);
int numSettings = sortedSettings.Count;
TextBox[] txt = new TextBox[numSettings];
Label[] label = new Label[numSettings];
int labelSpacing = this.labelSecond.Top - this.labelTop.Bottom;
int textSpacing = this.textBoxSecond.Top - this.textBoxTop.Bottom;
int line = 0;
foreach (KeyValuePair<string, string> key in sortedSettings)
{
label[line] = new Label();
label[line].Text = key.Key;
label[line].Left = this.labelTop.Left;
label[line].Height = this.labelTop.Height;
label[line].Width = this.labelTop.Width;
txt[line] = new TextBox();
txt[line].Text = key.Value;
txt[line].Left = this.textBoxTop.Left;
txt[line].Height = this.textBoxTop.Height;
txt[line].Width = this.textBoxTop.Width;
txt[line].ReadOnly = false;
// Attach and initialize EventHandler for template textbox on Leave
txt[line].Leave += new System.EventHandler(txt_Leave);
if (line > 0)
{
label[line].Top = label[line - 1].Bottom + labelSpacing;
txt[line].Top = txt[line - 1].Bottom + textSpacing;
}
else
{
label[line].Top = this.labelTop.Top;
txt[line].Top = this.textBoxTop.Top;
}
this.Controls.Add(label[line]);
this.Controls.Add(txt[line]);
line++;
}
private void txt_Leave(object sender, EventArgs e)
{
String enteredVal = sender;
FormUtilities.FindAndCenterMsgBox(this.Bounds, true, "EventChecker");
MessageBox.Show("The current value of LABEL is " + enteredVal, "EventChecker");
}
一个选择是使用TextBox。标签属性。
示例(foreach循环):
txt[line] = new TextBox();
txt[line].Text = key.Value;
txt[line].Tag = label[line];
获取与TextBox关联的标签:
TextBox t = txt[0];
Label l = t.Tag as Label;
//Here is how you identify textbox which generated the event.
private void txt_Leave(object sender, EventArgs e)
{
TextBox tb = sender as TextBox;
//..
}