2013-05-30 96 views
0

我正在使用动态创建的文本框来制作窗体,如在该方法中看到的。从动态创建的WinForms文本框中获取文本

public void createPassengerBoxes(int numPassenger) 
    { 
     TextBox[] passengerBoxes = new TextBox[numPassenger]; 

     for (int u = 0; u < passengerBoxes.Count(); u++) 
     { 
      passengerBoxes[u] = new TextBox(); 
     } 
     int i = 0; 
     foreach (TextBox txt in passengerBoxes) 
     { 
      string name = "passenger" + i.ToString(); 

      txt.Name = name; 
      txt.Text = name; 
      txt.Location = new Point(244, 32 + (i * 28)); 
      txt.Visible = true; 
      this.Controls.Add(txt); 
      i++; 
     } 
    } 
} 

如何从框中访问文本?

+1

在什么能力?我的意思是,只是随机访问控件的文本,或者你的意思是对TextChanged或其他用户事件做出反应? – DonBoitnott

+0

我想做一个新的方法,可以得到用户放在文本框中的文本 – user2436535

回答

0

虽然我不知道在什么时候,或者基于什么样的行动,你想获取数据,这里是非常通用的方法:

private String[] GetTextBoxStrings() 
{ 
    List<String> list = new List<String>(); 
    foreach (Control c in this.Controls) 
    { 
     if (c is TextBox) 
      list.Add(((TextBox)c).Text); 
    } 
    return list.ToArray(); 
} 
+0

thx它终于工作:) – user2436535

0

将您的文本框声明移到该函数之外。这使得从类中的其他功能进行访问:

class MyFormsClass 
{ 
    // declare textboxes at class level 
    TextBox[] passengerBoxes; 

    public void createPassengerBoxes(int numPassenger) 
    { 
     passengerBoxes = new TextBox[numPassenger]; 
     ... 
    } 

    public void OnButtonClick(...) 
    { 
     if (passengernBoxes != null) 
     { 
      foreach (TextBox txt in passengerBoxes) 
      { 
       // do something with textboxes 
      } 
     } 
    } 
    ... 
} 
0

您也可以使用LAMBDA:

var strings = Controls.OfType<TextBox>() 
         .Select(c => c.Text) 
         .ToList(); 

这只是工作,如果欧有没有嵌套的控制 - 例如,一个面板或一个容纳一些文本框的组