我有一个usercontrol
包含一个面板,它包含两组Textboxes
一个用于名称,另一组用于评论,我动态创建文本框然后隐藏用于评论的textbox
。
此处我无法显示on click
事件,我尝试使用名为Textbox()
的函数,但它只为第一行添加了注释框。
这是在usercontrol
public void Textbox()
{
TextBox[] tb1 = new TextBox[10];
for (int i = 0; i < 7; i++)
{
tb1[i] = new TextBox();
tb1[i].Multiline = true;
tb1[i].Height = 10;
tb1[i].Name = i.ToString();
tb1[i].Location = new Point(250 + i * 90, 82);
tb1[i].Size = new System.Drawing.Size(80, 40);
rowpanel.Controls.Add(tb1[i]);
}
}
接下来,我这样做
private void comment_btn_Click(object sender, EventArgs e)
{
add.Textbox();
}
当我点击comment_btn
时,评论文本框会添加到第一行。
add
是usercontrol
如图所示,当单击添加时,多行文本框仅添加到第一行,我希望将其添加到面板上显示的每一行,我只是想弄清楚我是怎么做的,
答案 0 :(得分:1)
您提到它只为第一行生成一个文本框,表示您希望动态生成的注释文本框显示在多行上?
您在那里获得的代码将生成多列中同一行的文本框。可能是你的所有7个文本框都正确生成,但是你只能看到第一个文本框,因为第二个文本框超出了面板的范围。
将位置线更改为
tb1[i].Location = new Point(250, 82 + i * 50);
将在多行而不是多列上生成文本框,并希望显示您所追求的内容。 - 添加屏幕截图表明上述内容不是问题。
编辑:如果这些控件行中的每一行都是您的用户控件的一个实例,那么目前您只在其中一个控件上调用Textbox()
方法,这就是为什么只有一个正在添加行。您需要在comment_btn_Click
方法中添加一个循环,该循环在您创建的每个控件上调用Textbox()
方法。
e.g。假设您的用户控件集合位于名为show_pnl的面板上,并假设您的用户控件的类型为TimeRecordingControl:
private void comment_btn_Click(object sender, EventArgs e)
{
foreach(Control control in show_pnl.Controls)
{
TimeRecordingControl timeRecordingControl = control as TimeRecordingControl;
if(timeRecordingControl != null)
{
timeRecordingControl.Textbox();
}
}
}
另外,请考虑以表明他们所做的方式命名您的方法,即CreateTextboxesForComments
而不仅仅是Textbox
:)