【问题标题】:how do I show textbox hidden in usercontrol?如何显示隐藏在用户控件中的文本框?
【发布时间】:2013-01-04 07:26:52
【问题描述】:


我有一个包含面板的usercontrol,它包含两组Textboxes,一组用于名称,另一组用于cmets,我动态创建文本框,然后隐藏用于评论的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

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

【问题讨论】:

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


    【解决方案1】:

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

    您在那里获得的代码将在多列的同一行中生成文本框。可能您的所有 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 :)

    【讨论】:

    • @Thuddbutt,我尝试循环,我使用了一个 for 循环,我增加了每次点击的计数值,但不知何故我不能t get it working,add ` 是 usercontrol 类型和 Textbox() usercontrol AddRow 循环的方法没有帮助,您还有其他建议吗?
    • 以上屏幕截图的哪一部分是您的用户控件?它是在 2 行中包含 2 个下拉菜单和 14 个文本框的部分吗?如果是,那么您的父表单上有该用户控件的多个实例,并且只有第一个称为“添加”。您应该循环使用 usercontrol 类型的控件集合并在每个控件上调用 Textbox()
    • ,我知道我必须循环它,但我不知道我应该怎么做,我在上一条评论中提到了这个,你能告诉我我应该怎么做,循环控件集合,如何为每个usercontrol 类型调用Textbox()
    • 我在答案中添加了一个示例。
    • ,它工作正常,我不得不稍微改变一下我的代码 usercontrol addAddRow 类型,非常感谢,它现在可以工作了......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多