Каждый элемент управления, производный от элемента управления, имеет свойство Text, то есть каждый элемент управления, однако для некоторых элементов управления это свойство не имеет значения.
Чтобы создать полный список элементов управления, вам нужно выполнить итерацию коллекции Controls формы, а затем, для каждого элемента управления внутри нее, рекурсивно повторить коллекцию Controls этого элемента управления.
IList<Control> controlsOnForm = new List<Control>();
BuildControlsList(this.Controls, controlsOnForm);
private static void BuildControlsList(ControlCollection controls, IList<Control> listToPopulate)
{
foreach (Control childControl in controls)
{
listToPopulate.Add(childControl);
BuildControlsList(childControl.Controls, listToPopulate);
}
}
На самом деле я не уверен, как вы собираетесь различать элементы управления, которые имеют полезное свойство Text, и элементы управления, для которых оно не используется. Очевидно, один из подходов состоит в том, чтобы исключить те элементы управления, которые имеют пустую строку для свойства Text.
Можно также сделать что-то подобное для меню (обратите внимание, что вам нужно будет немного изменить это, если вы используете MainMenuStrip):
IList<Menu> menusOnForm = new List<Menu>();
if (this.Menu != null)
{
menusOnForm.Add(this.Menu);
BuildMenuList(this.Menu.MenuItems, menusOnForm);
}
private static void BuildMenusList(MenuItemCollection menuItems, IList<Menu> listToPopulate)
{
foreach (Menu menuItem in menuItems)
{
listToPopulate.Add(menuItem);
BuildMenusList(menuItem.MenuItems, listToPopulate);
}
}