获取所选动态文本框的文本c#

时间:2013-04-05 12:41:33

标签: c# winforms user-controls runtime dynamically-generated

我在winform上有一个usercontrol,我在每次点击按钮时都会创建多个用户控件(在运行时)。我usercontrol有一个textbox。另外,在winform上我有一个简单的文本框。我想,当我选择一个用户控件时,动态文本框中的文本也出现在简单的文本框中。在我的代码中,它表示来自usercontrol的文本框不在当前上下文中。我的代码:

private void Gettext()
{
    int i = 0;
    Control[] txt = Controls.Find("txtBox" + i.ToString(), true);//here I search for the dynamical textbox
    foreach (Control c in panel1.Controls)
    {
        if (c is UserControl1) 
        {
            if (((UserControl)c).Selected)
                 txtSimple.Text= txtBox[0].Text ;
        }
        i++;
    }

4 个答案:

答案 0 :(得分:1)

Control[] txt = ...
txtSimple.Text= txtBox[0].Text ;

可以将txtBox [0] .Text替换为txt [0] .Text?

答案 1 :(得分:1)

好好开始

Control[] txt = Panel1.Controls.Find("txtBox" + i.ToString(), true)

然后

foreach (Control c in txt) // txt???
{
    UserControl1 uc = c as UserControl1;
    if (uc != null) 
    {
        if (uc.Selected) txtSimple.Text= uc.Text ;
    }
}

然后,如果您正在测试UserControl1,您还应该转换为UserControl1而不是UserControl

UserControl1是一个非常糟糕的名字..

我甚至不会提到所有控件都有一个以txtBox开头的名称并且没有其他控件具有的假设......

如果在运行时选择了多个控件,整个过程就会死亡。

答案 2 :(得分:1)

我不知道我是否理解你的问题:

表单的结构如下所示:

  • 您的表单有一个Panel panel1,它有许多UserControl1类型的UserControl,在运行时创建,还有一个TextBox txtSimple。
  • 每个UserControl都有一个名为[“txtBox”+ i]
  • 的TextBox
  • on选择要同步所选UserControl的文本txtSimple和TextBox

然后:

int i=0;
foreach (Control c in panel1.Controls)
{
    if (c is UserControl1) 
    {
        if (((UserControl)c).Selected)
        {
             TextBox dynTxtBox = (TextBox)c.Controls["txtBox" + i];
             txtSimple.Text= dynTxtBoxe.Text;
        }
    }
    i++;
}

如果您无法以这种方式找到TextBox,则可能意味着其名称设置不正确。

另外,如果你的UserControl上只有一个TextBox,那么通常不需要以这种特定的方式命名它(我的意思是你的代码我假设你的第一个用户控件上有txtBox0,你的第二个上有txtBox1,所以上)。您可以简单地将其命名为“txtBox”,然后像这样访问它:

txtSimple.Text = selectedUserControl.Controls["txtBox"].Text;

控件名称在Control,UserControl和Form的Controls集合中是唯一的。

答案 3 :(得分:1)

您需要在UserControl上设置选定的活动。

    //in UserControl
    public event EventHandler Selected;

    private void textBox1_MouseClick(object sender, MouseEventArgs e)
    {
        if(Selected!=null)
            Selected(this,null);
    }

现在在动态创建时订阅UserControl的Selected事件。像这样:

    UserControl control = new UserControl();
    control.Selected += myControl_Selected;


    private void myControl_Selected(object sender, EventArgs e)
    {
        UserControl control = (UserControl)sender;
        textBox2.Text = control.Text;
    }

我希望这会有所帮助。