使用 C# 创建与数据库值相关的动态文本框
Posted
技术标签:
【中文标题】使用 C# 创建与数据库值相关的动态文本框【英文标题】:CREATING DYNAMIC TEXTBOXES IN RELATION TO DATABASE VALUES with C# 【发布时间】:2021-03-27 01:10:49 【问题描述】:我正在从数据库表中选择我的测试,我想在每个测试前创建一个文本框,用户将在其中输入每个测试的结果,并能够保存每个测试的结果 .我得到的错误信息是
“索引超出了数组的边界”
int tindex=0;
TextBox[] rst = new TextBox[tindex];
try
while (sub.Read())
tindex++;
Label tst = new Label();
tst.Location = new Point(1, startingpoint);
tst.Name = "textBoxf";
tst.Size = new Size(200, 18);
tst.BorderStyle = BorderStyle.None;
tst.BackColor = SystemColors.Control;
tst.Text += sub.GetString("abbrev");
try
rst[tindex] = new TextBox();
rst[tindex].Location = new Point(120, startingpoint);
rst[tindex].Name = "textBoxf";
rst[tindex].Size = new Size(70, 12);
rst[tindex].BorderStyle = BorderStyle.None;
rst[tindex].BackColor = SystemColors.Control;
rst[tindex].TabIndex = tindex;
rst[tindex].TextChanged += rst_textchanged;
rst[tindex].KeyDown += rst_KeyDown;
TextBox rsts = rst[tindex];
panel7.Controls.Add(rst[tindex]);
catch(Exception er)
MessageBox.Show(er.Message);
I want a result like the one in the image. I can achieve this by just creating the textbox in a loop without the use of arrays, but it became hard to read from them the textbox since it's looping as one textbox
【问题讨论】:
提示:您认为要写入的新数组的第一个索引是什么? 提示 2:int tindex=0; TextBox[] rst = new TextBox[tindex];
...看看这段代码。它创建的数组有多大?
目前还不清楚为什么在这里需要一个数组,因为您在创建后立即将每个文本框添加到面板中。您以后需要该数组来做其他事情吗?
【参考方案1】:
你的问题在这里:
int tindex=0;
TextBox[] rst = new TextBox[tindex];
您创建了一个可以容纳 0 个条目的空数组,因为 tIndex 为 0。
然后你甚至增加这个数字,使其第一个循环为 1
tindex++;
然后您访问当前索引为 1 的数组。请记住,该数组仍然可以容纳 0 个项目。这就是引发异常的地方。要翻译异常文本:您的数组边界是 0,而 1 在这些边界之外。
rst[tindex] = new TextBox();
看起来你甚至不需要第一个数组。至少不在你的剪报中。所以我建议删除它。
而不是:
rst[tindex] = new TextBox();
rst[tindex].Location = new Point(120, startingpoint);
rst[tindex].Name = "textBoxf";
rst[tindex].Size = new Size(70, 12);
rst[tindex].BorderStyle = BorderStyle.None;
rst[tindex].BackColor = SystemColors.Control;
rst[tindex].TabIndex = tindex;
rst[tindex].TextChanged += rst_textchanged;
rst[tindex].KeyDown += rst_KeyDown;
TextBox rsts = rst[tindex];
panel7.Controls.Add(rst[tindex]);
你做这样的事情:
TextBox newBox = new TextBox();
newBox.Location = new Point(120, startingpoint);
newBox.Name = "textBoxf";
newBox.Size = new Size(70, 12);
newBox.BorderStyle = BorderStyle.None;
newBox.BackColor = SystemColors.Control;
newBox.TabIndex = tindex;
newBox.TextChanged += rst_textchanged;
newBox.KeyDown += rst_KeyDown;
panel7.Controls.Add(newBox);
如果你确实需要一个数组,我建议你使用一个列表:
List<TextBox> textBoxes = new List<TextBox>();
try
while (sub.Read())
Label tst = new Label();
tst.Location = new Point(1, startingpoint);
tst.Name = "textBoxf";
tst.Size = new Size(200, 18);
tst.BorderStyle = BorderStyle.None;
tst.BackColor = SystemColors.Control;
tst.Text += sub.GetString("abbrev");
try
TextBox newBox = new TextBox();
newBox.Location = new Point(120, startingpoint);
newBox.Name = "textBoxf";
newBox.Size = new Size(70, 12);
newBox.BorderStyle = BorderStyle.None;
newBox.BackColor = SystemColors.Control;
newBox.TabIndex = tindex;
newBox.TextChanged += rst_textchanged;
newBox.KeyDown += rst_KeyDown;
// Add the new textbox to list
textBoxes.Add(newBox);
// Also add it to the panel controls
panel7.Controls.Add(newBox);
catch(Exception er)
MessageBox.Show(er.Message);
【讨论】:
感谢 AdrAs。这帮助我发现了我的错误。以上是关于使用 C# 创建与数据库值相关的动态文本框的主要内容,如果未能解决你的问题,请参考以下文章
在 c# 中使用 javascript 日历设置值后如何获取文本框的文本?