События в Windows-приложениях
Теперь, когда мы разобрались с синтаксисом и логикой делегатов и событий, настало время приступить к рассмотрению событийной модели Windows-форм.
Откройте снова приложение FirstForm. Из окна Toolbox перетащите элемент управления Button на форму. Дважды щелкните на кнопке button1. В коде найдите область Windows Form Designer generated code. В таблице 1.3 сравниваются листинги приложений Event и FirstForm c кнопкой.
using System; |
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; |
namespace Event { //Объявляем делегат Mydelegate delegate void Mydelegate(); //Создаем класс Button, в котором //будет находится событие //и метод для него class Button { // Объявляем событие Sobitie // на основе делегата public event Mydelegate Sobitie; //Cоздаем метод для события, //который просто будет //обращаться к событию public void MetoddlyaSobitiya() { //Можно вставить проверку наличия события. //if (Sobitie !=null) Sobitie(); } class Class1 { |
namespace FirstForm { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } protected override void Dispose(bool disposing) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code private void InitializeComponent() { // Среда автоматически создает экземпляр // button1 класса Button при перетаскивании // элемента управления на форму this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(104, 144); this.button1.Name = "button1"; this.button1.TabIndex = 0; this.button1.Text = "button1"; // Среда автоматически привязывает // обработчик для события Click экземпляра // button1. EventHandler – это делегат. this.button1.Click += new System.EventHandler(this.button1_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Fom1"; this.ResumeLayout(false); } #endregion |
[STAThread] static void Main(string[] args) { // Создаем экземпляр btn класса Button Button btn = new Button(); //привязываем обработчик для события //Sobitie экземпляра btn. //Когда в скобках укажете //Metodobrabotchik, нажмите //дважды клавишу Tab btn.Sobitie += new Mydelegate(Metodobrabotchik); //Развернутая запись строки выше //btn.Sobitie = btn.Sobitie + // new Mydelegate(Metoddlyadelegata); //вызываем метод для события btn.MetoddlyaSobitiya(); } |
[STAThread] static void Main() { Application.Run(new Form1()); } |
// Создаем метод-обработчик, если среда // сгенерировала его сама – // добавляем строку вывода. private static void Metodobrabotchik () { Console.WriteLine("Произошло событие"); } } } } |
// Метод-обработчик для нажатия на кнопку; // когда мы щелкаем по элементу управления // в режиме дизайна, среда генерирует этот //метод и курсор оказывается уже здесь private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show("Произошло событие"); } } } |
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий