2013-04-05 26 views
1

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

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++; 
    } 
+1

你怎么选择你的文本框?通过点击或Tabbing或如何? – Dilshod 2013-04-05 12:49:38

+2

我为此创建了一个方法。我点击一个来自usercontrol的图片框,并按下ctrl键时,我的用户控件被选中。 – Viva 2013-04-05 12:52:29

+2

好的。为什么要在代码中搜索动态创建的文本框?你为什么不把你选择的事件放在你的用户控件上? – Dilshod 2013-04-05 12:54:43

回答

1

我不知道如果我理解正确你的问题:

您的结构形式看起来是这样的:

  • 您的形式有有型的UserControl1用户控件多一个小组PANEL1 ,在运行时创建,以及一个TextBox txtSimple。
  • 每个用户控件具有要选择的用户控件的同步txtSimple和文本框的文本

然后名为[ “txtBox” + I]

  • 上选择一个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; 
    

    控制名称是在控制,用户控件和形式的控件集合独特。

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

    可能被替换txtBox [0]。文本为txt [0]。文本?

    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,你也应该投射到UserControl不是用户控件

    的UserControl1是一个极坏的命名为它..

    我也不打算提assumpti对所有的控件都有名称以txtBox并没有其他控件有...

    如果它运行时选择了多个控制整个事情死亡。

    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; 
        } 
    

    我希望这会有所帮助。