我正在做一个个人项目,我正在构建一个笔记生成器,每次单击按钮时都会动态创建这个TextBox,它工作得很好,就像我预期的那样,但是当我试图通过使用循环Name = "Note" + i
(其中i
是循环变量)将每个TextBox命名为不同的名称时,事情变得很奇怪。
因此,我期望发生的情况是,每个TextBox名称都类似于Note1
Note2
Note3 ...
,但当我在用于生成TextBox的同一个循环中将每个TextBox名称检索到MessageBox时,MessageBox会引发以下错误:而不是Note 1
Note 1
Note 1 ...
。
int curr = 0;
private void guna2Button1_Click(object sender, EventArgs e) {
int top = 25;
int h_p = 170;
curr++;
for(int i=1; i<curr+1; i++) {
// Notes
var new_note = new Guna2TextBox() {
Text = "Title\n",
Name = "Note" + i,
Multiline = true,
AcceptsTab = true,
AcceptsReturn = true,
WordWrap = false,
ScrollBars = ScrollBars.Vertical,
Width = 220,
Height = 110,
BorderRadius = 8,
Font = new Font("Bahnschrift", 13),
ForeColor = Color.White,
FillColor = ColorTranslator.FromHtml("#1E1E1E"),
BorderColor = ColorTranslator.FromHtml("#2C2C2C"),
Location = new Point(450,top)
};
MessageBox.Show(i.ToString());
top += h_p;
flowLayoutPanel1.Controls.Add(new_note);
curr = 0;
}
}
2条答案
按热度按时间wvyml7n51#
这个问题是由于在循环中您总是将Curr设置回零而引起的。并且根本不需要循环,因为您希望在每次单击时添加一个文本框。因此,您只需要查看FlowLayoutPanel的Count属性,并使用该值来准备名称。
要解决的另一个问题是如何在面板中定位下一个控件,但同样,您可以使用Count属性轻松地进行计算
c9qzyr3d2#
我认为在这种情况下不需要使用
For
循环,只需要为每个文本框使用变量curr
即可,因此可以使用以下代码代替For
循环: