2013-05-30 141 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(); 

這只是工作,如果歐有沒有嵌套的控制 - 例如,一個面板或一個容納一些文本框的組