2016-11-18 89 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