0

我有一个带有多个文本框的表单,这些文本框是程序从中导入数据的文件路径。目前,它们通过以下方式检查非零长度:

    //this code imports the files required by the user, as specified in the
    //file path text boxes
    private void btImport_Click(object sender, EventArgs e)
    {
        bool hasPath = false;
        foreach (TextBox box in this.gbPaths.Controls.OfType<TextBox>().Where(tb => tb.Text.Length > 0))
        {
            hasPath = true;
            //import code
        }//end foreach

        if (!hasPath)
        {
            MessageBox.Show("You must enter at least one file path.");
        }//end if
    }//end import code

我想知道的是我可以用类似的//import code东西替换这个部分:

if(tb.Name = "txtAvF") then...

或类似的,还是我必须在 foreach 循环之外进行?提前致谢。如果我需要澄清任何事情,请告诉我。

4

3 回答 3

0

如果您想检查 TextBox 是否是表单上的其中之一(我认为您是),那么您就是==其中之一(取自 MSDN

the operator == tests for reference equality by determining if two references indicate the same object

所以这就是你要找的:

if(box == textBox1 && !string.IsNullOrEmpty(box.Text))
{
      // Import Textbox1
}
else if(box == textBox2 && !string.IsNullOrEmpty(box.Text))
{
      // Import Textbox2
}
else if (box == textBox3....)
于 2010-10-26T03:33:52.150 回答
0

您应该在循环内执行此操作。像这样:

if (box.Name == "txtAvF")
    box.Text = "What you want";

但是hasPath在循环内设置只是保持你最后一条路径的状态。您还应该MessageBox在循环内移动代码。

于 2010-10-26T03:37:09.670 回答
0

hasPath 分配对我来说似乎是正确的;它是为任何一个文本框设置的,如果在循环结束时没有设置,则会显示一条消息。这与如此显示的文本押韵。将 MessageBox 调用移动到循环中将导致对话框永远不会显示(或错误显示),至少在现在实现代码时,因为 OfType<>().Where() 保证所有迭代过的文本框都有至少有一些内容。

(我会将此作为评论添加到@Xaqron,但还没有必要的声誉。)

于 2010-10-26T11:30:12.930 回答