2016-07-28 37 views
-1

我試圖找到當前foreach循環所在的位置,我可以根據當前狀態對foreach循環進行不同的處理。如果它在groupbox1或groupbox2中。找到foreach循環的位置

 int Name = 1; 
     string Usernames = @"C:\UPHhour\names.txt"; 
     using (FileStream fs = new FileStream(Usernames, FileMode.Create, FileAccess.Write)) 
     using (StreamWriter sw = new StreamWriter(fs)) 
     { 
      var Names = groupBox1.Controls.Cast<Control>().Concat(groupBox2.Controls.Cast<Control>()); 
      foreach(Control OLR_FF in Names.Cast<Control>().OrderBy(c => c.TabIndex)) 
      {     
       if(!string.IsNullOrWhiteSpace(OLR_FF.Text.ToString())) 
       { 
        //if the foreach loop is in groupbox1 
        if(OLR_FF is groupbox1) 
        {       
         //do something 
        } 
        // or if its in groupbox2 
        if(OLF_FF is groupbox2) 
        { 
         //do something different. 
        } 
        //sw.WriteLine("Name"+ Name++ + "=" + OLR_FF.Text.ToString()); 
       } 
      } 
     } 

我該如何瞭解循環是在groupbox1還是在groupbox2?

+5

如果你實際上並不希望做同樣的事情到兩個序列,那麼就不要Concat的在一起第一個地方。 – Servy

+0

'如果(OLR_FF.Parent == groupbox1)','=='而不是'is' –

+0

@Servy我同意你,如果它不是'.OrderBy(c => c.TabIndex)'在'foreach',如果訂單在兩個組框之間來回跳動,則執行兩個單獨的'foreach'將不會按標籤順序處理這些項目。 –

回答

0

在使用Control.Parent屬性然後檢查父等於兩個組框之一

if(!string.IsNullOrWhiteSpace(OLR_FF.Text.ToString())) 
{ 
    //if the foreach loop is in groupbox1 
    if(groupbox1.Equals(OLR_FF.Parent)) 
    {       
     //do something 
    } 
    // or if its in groupbox2 
    else if(groupbox2.Equals(OLF_FF.Parent)) 
    { 
     //do something different. 
    } 
    //sw.WriteLine("Name"+ Name++ + "=" + OLR_FF.Text.ToString()); 
} 
+0

謝謝你。 Parent.Equals工作。 – user2851021

+0

大聲笑。 StackOverflow就像我必須等待7分鐘才能標記爲已回答。 – user2851021