2011-05-27 2 views
0

я получил эту проблему GetEnumerator .. вот моя ситуацияGetEnumerator проблема в C#

 Panel eachPanel = new Panel(); 
     eachPanel.Size = new Size(pnlProcessCon.Width - 27, 24); 
     eachPanel.Location = new Point(5, startPoint); 
     eachPanel.BackColor = (defaultColor == alterColor[0]) ? alterColor[1] : alterColor[0];    

     TextBox txtProcess = new TextBox(); 
     txtProcess.Size = new Size(50, 20); 
     txtProcess.Location = new Point(2,2); 
     txtProcess.TextAlign = HorizontalAlignment.Center; 
     txtProcess.Text = "P" + Convert.ToString(startProcess); 

     TextBox txtBurstTime = new TextBox(); 
     txtBurstTime.Size = new Size(50, 20); 
     txtBurstTime.Location = new Point(txtProcess.Right + 70, 2); 
     txtBurstTime.TextAlign = HorizontalAlignment.Center; 

     TextBox txtPriority = new TextBox(); 
     txtPriority.Size = new Size(50, 20); 
     txtPriority.Location = new Point(txtBurstTime.Right + 70, 2); 
     txtPriority.TextAlign = HorizontalAlignment.Center; 

     eachPanel.Controls.Add(txtProcess); 
     eachPanel.Controls.Add(txtBurstTime); 
     eachPanel.Controls.Add(txtPriority); 

     pnlProcessCon.Controls.Add(eachPanel); 

но когда я называю каждого из их текста и добавить в словарь, я получил эту ошибку ..

Error 1 foreach statement cannot operate on variables of type 'System.Windows.Forms.Panel' because 'System.Windows.Forms.Panel' does not contain a public definition for 'GetEnumerator' C:\Users\[email protected]\Documents\Visual Studio 2008\Projects\Scheduler\Scheduler\Form1.cs 68 13 Scheduler 

и получил мою ошибку здесь.

foreach (var each in pnlProcessCon) 
     { 
      String[] temp = new String[3]; 
      foreach (var process in each) 
      { 
       temp = process.Text;      
      } 

     } 

ответ

5

Есть несколько вопросов.

Во-первых, вы должны перечислить коллекции элементов управления. Во-вторых, перед тем, как вы сможете получить текст, вам необходимо отбросить каждый элемент управления до TextBox. В-третьих, вы объявили temp как массив, поэтому вы не можете напрямую назначить ему строку. Четвертый (как указал Хенк Холтерман), вы должны использовать фактические типы, а не var в петлях foreach.

Я собираюсь сделать удар по рабочему коду здесь. Не стесняйтесь приспосабливаться к вашим собственным потребностям.

TextBox txtProcess = new TextBox(); 
txtProcess.Name = "Process"; 
//configure other textboxes, add to panels, etc. 

foreach (Panel each in pnlProcessCon.Controls) 
{ 
    String[] temp = new String[3]; 
    foreach (Control control in each.Controls) 
    { 
     if(control.Name == "Process") 
     { 
      temp[0] = ((TextBox)control).Text; 
     } 
    } 
} 
+0

ay .. grrrrr .. я знаю эту вещь .. хе-хе .. извините за задание глупых вопросов .. им просто пьяный .. спасибо за ответ ..;) –

+3

@vrynxzent, почему вы программируете пьяным ?! – svick

+0

Я не думаю, что 'var' будет работать. Элементы управления - это коллекция старого стиля. –

1

Это будет общая идея (примечание: нет var)

foreach (Panel p in pnlProcessCon.Controls) 
{ 
    foreach (Control process in p.Controls) 
    { 
    }      
} 

Но убедитесь, что pnlProcessCon содержит только панели.

Смежные вопросы