Классы меню
Все, что можно делать руками, можно делать программно. Рассмотрим классы, используемые при работе с меню. Основным родительским классом является класс Menu, задающий базовую функциональность трех своих потомков - классов MainMenu, ContextMenu и MenuItem. Класс MenuItem задает элемент меню, который, напомню, сам может являться меню (подменю). Свойство MenuItems, которым обладают все классы меню, возвращает коллекцию MenuItems из элементов меню класса MenuItem. С коллекцией можно работать обычным образом. Создание меню означает создание объектов контейнерных классов MainMenu и ContextMenu и множества объектов класса MenuItem. Последние добавляются в коллекцию либо контейнерных классов, либо в коллекцию соответствующих элементов MenuItem. Созданные объекты классов MainMenu и ContextMenu связываются со свойствами формы - Menu и ConextMenu. Проанализируем код, созданный в процессе проектирования Дизайнером Меню и Дизайнером Формы для нашего примера.
Вот какие поля формы, задающие объекты меню, были сформированы:
private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem menuItem1; //другие элементы меню private System.Windows.Forms.MenuItem menuItem10;
Основной код, создаваемый дизайнерами, помещается в метод InitializeComponent. Приведу лишь фрагменты этого кода:
this.mainMenu1 = new System.Windows.Forms.MainMenu(); this.menuItem1 = new System.Windows.Forms.MenuItem(); ... // mainMenu1 this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItem1,this.menuItem2,this.menuItem3}); // menuItem1 this.menuItem1.Index = 0; this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItem4,this.menuItem10}); this.menuItem1.Text = "File"; ... // menuItem4 this.menuItem4.Index = 0; this.menuItem4.Text = "Open"; this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click); ... // Form1 ... this.Controls.AddRange(new System.Windows.Forms.Control[] { this.textBox1}); this.Menu = this.mainMenu1; this.Name = "Form1"; this.Text = "Form1";