在我的Visual C#Form应用程序中,我在组合框中有一个组合框,以帮助整理/看起来整洁。但是,一旦我将组合框放在组合框中,我就无法通过循环遍历表单上的所有控件来找到它。
例如,如果我在Groupbox中使用Combobox运行此代码,我得到的结果与在组框外部的结果不同:
foreach (Control contrl in this.Controls)
{
richTextBox1.Text += "\n" + contrl.Name;
}
如果组合框位于组框内,则无法找到它。
我还注意到在Form1.Designer.cs文件中,每当我在组合框中添加组合框时,组框中会出现以下代码行:
this.groupBox4.Controls.Add(this.myComboBox);
..
this.groupBox4.Location = new System.Drawing.Point(23, 39);
this.groupBox4.Name = "groupBox4";
... etc...
此行将被删除:
this.Controls.Add(this.myComboBox);
如果我尝试手动编辑它,一旦我将组合框移回组合框内,它会自动切换回来。
任何帮助将不胜感激!谢谢!
布赖恩
答案 0 :(得分:1)
正如您所说,您将组合框添加到组框中,因此它会添加到组Controls
组框中,设计人员会生成此代码:
this.groupBox4.Controls.Add(this.myComboBox);
因此,如果您想以编程方式找到组合框,可以使用以下选项:
this.myComboBox
?var combo = (ComboBox)this.Controls.Find("myComboBox", true).FirstOrDefault();
var combo = (ComboBox)this.groupBox4.Controls["myComboBox"]
此外,如果你想要循环,你应该使用:
循环this.groupBox4.Controls
foreach(Control c in this.groupBox4.Controls) {/*use c here */}
this.groupBox4.Controls.Cast<Control>().ToList().ForEach(c=>{/*use c here */})
答案 1 :(得分:0)
就像Form对象一样,Group对象可以包含一组控件。您需要遍历Group控件的控件集合。
答案 2 :(得分:0)
在GroupBox中获取所有或一个ComboBox的另一个想法,在本例中为groupBox1。 Resate Resa建议使用Find with FirstOrDefault最好访问一个组合框。
List<ComboBox> ComboBoxes = groupBox1
.Controls
.OfType<ComboBox>()
.Select((control) => control).ToList();
foreach (var c in ComboBoxes)
{
Console.WriteLine(c.Name);
}
string nameOfComboBox = "comboBox1";
ComboBox findThis = groupBox1
.Controls
.OfType<ComboBox>()
.Select((control) => control)
.Where(control => control.Name == nameOfComboBox)
.FirstOrDefault();
if (findThis != null)
{
Console.WriteLine(findThis.Text);
}
else
{
Console.WriteLine("Not found");
}
答案 3 :(得分:0)
您可以使用ControlCollections Find方法,它有一个参数可以搜索父级及其子级以供您控制。
ComboBox temp;
Control[] myControls = Controls.Find("myComboBox", true); //note the method returns an array of matches
if (myControls.Length > 0) //Check that it returned a match
temp = (ComboBox)myControls[0]; //use it