如何在usercontrol中显示隐藏的文本框?

时间:2013-01-04 07:26:52

标签: c# user-controls textbox show-hide

screen shot of multiline text
我有一个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时,评论文本框会添加到第一行。 addusercontrol

如图所示,当单击添加时,多行文本框仅添加到第一行,我希望将其添加到面板上显示的每一行,我只是想弄清楚我是怎么做的,

1 个答案:

答案 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:)