为什么Find()方法返回一个数组?

B. *_*non 3 c# winforms

我想找到一个名为"textBoxQH_N"的TextBox,其中"_N"是1..96的数字.

所以,我有这个代码:

String sTextBoxToFind = String.Format("textBoxQH{0}", QuarterHour);
TextBox tb = (TextBox)this.Controls.Find(sTextBoxToFind, true);
Run Code Online (Sandbox Code Playgroud)

...但它给了我," 无法将类型'System.Windows.Forms.Control []'转换为'System.Windows.Forms.TextBox' "

所以我更改了第二行以获取第一个返回的val:

TextBox tb = (TextBox)this.Controls.Find(sTextBoxToFind, true)[0];
Run Code Online (Sandbox Code Playgroud)

这看起来有效,但是控件名称属性不应该是其所有者独有的吗?IOW,Find()应该只返回0..1控件,对吗?

Ser*_*rvy 7

Find,第二个属性设置为true,是递归的."姓名"对于该父母来说是独一无二的,但您正在搜索许多不同的父母."名称"不是全球唯一的.

正如贾斯汀在另一个答案中所建议的,First或者FirstOrDefault可能比[0]在阵列上使用更好.它可以更好地将您的意图传达给未来的读者.

  • 这似乎是最合乎逻辑的答案; 虽然"Name"属性的文档实际上从未要求它是唯一的(还有其他方法可以唯一地标识控件),但我相信在Visual Studio IDE中强制实现父级别的唯一性. (2认同)