2016-11-18 136 views
0

快速更新,我發現爲什麼代碼不會工作,我想檢查的所有文本框都在groupboxes,那就是問題,如果我刪除groupbox問題得到解決。 有沒有辦法解決這個問題?忽略隱藏的空文本框

找到解決方案。 下面發佈以備將來參考。

再次感謝您的所有輸入。

 foreach (var textBox in Controls.OfType<GroupBox>().SelectMany(groupBox => groupBox.Controls.OfType<TextBox>())) 
    { 
     if (textBox is TextBox && textBox.Visible && string.IsNullOrEmpty(textBox.Text)) 
     { 
      MessageBox.Show($"Missing {textBox.Name} value!"); 
      Focus(); 
      return; 
     } 
    } 
+4

我相信你正在尋找'如果(larg.Visible ==真)'**注意非資本化的旋布爾值**。我不確定隱藏是textBoxes的一個屬性,如果它是那麼你的行應該讀取'if(larg.Hidden == false)'問題是一個布爾值不能被大寫,因爲這不是值 - 更容易幫助如果你告訴我們錯誤 –

+0

我是否正確地得到你 - 你的代碼工作,但你只是得到和錯誤* if(larg.Hidden == False)* codeline?你得到一個編譯錯誤?我想你會得到一個運行時錯誤。 這是wpf還是winforms?你把它稱爲「form」,所以我猜它是winforms,對吧? – TripleEEE

+0

@Alfie Goodacre代碼有效,但現在我點擊下一步,沒有任何反應。 – MarcIT

回答

1

你有沒有想過使用表單控件的foreach呢?喜歡的東西:

 foreach (Control c in Controls) 
     { 
      if (c is TextBox && c.Visible && string.IsNullOrEmpty(c.Text)) 
      { 
       MessageBox.Show($"TextBox {c.Name} is empty"); 
      } 
     } 

編輯:如果你的表單包含groupboxes,groupboxes是控制組,所以你將不得不通過他們的控制與子foreach來了。具體方法如下:

private void Form1_Load(object sender, EventArgs e) 
    { 
     CheckControlCollection(this.Controls); 
    } 
    private void CheckControlCollection(Control.ControlCollection cc) 
    { 
     foreach (Control c in cc) 
      if (c is GroupBox) 
       CheckControlCollection(c.Controls); 
      else 
       CheckControl(c); 
    } 
    private void CheckControl(Control c) 
    { 
     if (c is TextBox && c.Visible && string.IsNullOrEmpty(c.Text)) 
      MessageBox.Show($"TextBox {c.Name} is empty"); 
    } 

這將確保我們不要被嵌套groupboxes

+0

該代碼的作品,但我沒有得到消息,當沒有寫在textbox.the應用程序崩潰 – MarcIT

+1

@MarcIT什麼是** larg *和** alt **?從你的代碼我假設他們是文本框,如果是這樣,爲什麼你檢查他們的可見性狀態,而不是當前循環迭代的可見性,同時檢查表單中的每個文本框? – Innat3

+0

是的,他們是文本框。你能給我一個試驗嗎? – MarcIT