0

多行文本的屏幕截图
我有一个 usercontrol包含面板,它包含两组,Textboxes一组用于名称,另一组用于评论,我动态创建文本框,然后隐藏textbox用于评论的文本框。

在这里我无法显示on clickevent ,我尝试使用一个名为 的函数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

如图所示,当单击 Add 时,多行文本框仅添加到第一行,我希望将它添加到面板上显示的每一行,我只是不知道该怎么做,

4

1 回答 1

1

您提到它只为第一行生成一个文本框,表明您希望动态生成的评论文本框显示在多行上?

您在那里获得的代码将在多列的同一行中生成文本框。很可能您的所有 7 个文本框都正确生成,但您只能看到第一个,因为第二个开始超出了面板的范围。

将定位线更改为

tb1[i].Location = new Point(250, 82 + i * 50);

将在多行而不是多列上生成文本框,并希望显示您所追求的内容。- 添加屏幕截图表明上述不是问题。

编辑:如果这些控件行中的每一行都是您的用户控件的一个实例,那么目前您只Textbox()在其中一个上调用该方法,这就是为什么只添加一行。您需要在方法中添加一个循环,该循环在您创建的每个控件上comment_btn_Click调用该方法。Textbox()

例如,假设您的用户控件集合位于名为 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:)

于 2013-01-04T10:23:56.730 回答