Похоже, вы используете VB здесь - и я боюсь, что ответ будет на C #.
Вот мое решение, и вы можете увидеть скриншот (надеюсь, если эта кровавая ссылка сработает!), Где он работает.
Вам нужно рекурсивно перебирать все элементы управления в форме, переходя в коллекцию Controls каждого, если у него есть дочерние элементы.
В этом решении используется закрытый класс ControlInfo, внутри которого находится экземпляр Control, который переопределяет операцию ToString (), поэтому вы можете легко настроить текст, отображаемый в комбинированном списке. Затем вы связываете комбо со списком этих данных, создав их из дерева элементов управления формы.
Чтобы использовать этот код, создайте новую форму и поместите туда комбо с именем comboBox1, тогда вы сможете заменить все этим:
public partial class Form1 : Form
{
private class ControlInfo
{
public Control Control { get; set; }
public override string ToString()
{
return string.Format("{0} ({1})", Control.Name, Control.GetType());
}
}
public Form1()
{
InitializeComponent();
comboBox1.DataSource =
GetControls(this.Controls.Cast<Control>()).OrderBy(c => c.Name).
Select(c => new ControlInfo() { Control = c }).ToList();
}
private IEnumerable<Control> GetControls(IEnumerable<Control> controls)
{
foreach (var control in controls)
{
yield return control;
if (control.Controls.Count > 0)
{
foreach (var childControl in GetControls(
control.Controls.Cast<Control>()))
{
yield return childControl;
}
}
}
}