我把“Tricky”放在标题中,因为我知道很难准确理解我想要的东西,但我会尽力清楚。
我有一个带有TextChange事件的textBox,它允许我创建用户想要的texbox数量(我们称之为 tChange )。
以下是此活动代码的一部分:
int tester;
bool flag = false;
if (!Int32.TryParse(tChange.Text, out tester))
{
flag = false;
return;
}
else
{
num = Convert.ToInt16(tChange.Text);
flag = true;
}
if (flag == true)
{
if (num >= 1)
{
for (int i = 0; i < num; i++)
{
this.Size = new Size(590, 225 + 105 * i);
textBoxesQ[i] = new TextBox();
this.Controls.Add(textBoxesQ[i]);
textBoxesQ[i].Size = new Size(45, 20);
textBoxesQ[i].Location = new Point(25, 100 + 100 * i - 1);
}
}
}
因此用户输入值,一切正常。如果他想更改 tChange 中的数字,也没问题!表单调整大小并创建TextBoxes。 然而如果他这样做(更改 tChange 的值),一切都会出错!像
这样的错误指数超出范围
或者我无法从TextBoxes等获取值。
我开始认为TexBoxes是在之前的版本之前创建的,错误来自于此,所以我尝试将新版本放在前面,将旧版本放在前面,但没有一个工作..
textBoxesQ[i].BringToFront();
textBoxesQ[i].SendToBack();
我还尝试在创建新内容之前删除旧代码,但我认为我的代码很古怪而且根本不起作用。
textBoxesQ[i].Dispose();
编辑:作为@Dr。 Stitch说,每次更改 tChange 中的文本时,可能不会重新初始化TextBox。现在我只需要弄清楚如何实现它。
答案 0 :(得分:0)
当号码改变时你需要做三件事:
textBoxesQ
)类似于:
if (textBoxesQ != null)
{
foreach (var textBox in textBoxesQ)
{
Controls.Remove(textBox);
}
}
textBoxesQ = new TextBox[size];
for (int i = 0; i < size; i++)
{
var textBox = new TextBox
{
Size = new Size(45, 20);
Location = new Point(25, 100 + 100 * i - 1);
};
Controls.Add(textBox);
textBoxesQ[i] = textBox;
}