Добавление события. Код обработчика события.
- Скомпонуйте и выполните программы (стартовые системы) на С# и C++, находящиеся в папках VsForm\Stepl и VsFormPortXStepl, и убедитесь, что они работают одинаково. Это полностью статические приложения, – они просто отображают строку приветствия в фиксированной позиции.
- Откройте форму проекта VsForm\Stepl в окне конструктора (Design window) и щелкните на кнопке Events (События) в окне Properties (Свойства).
- Найдите событие MouseDown (Кнопка мыши нажата), как на рис. 6.18.
- В окне Properties (Свойства) дважды щелкните на событии MouseDown (Кнопка мыши нажата). Автоматически будет сгенерирован код, который зарегистрирует делегата для события и образует скелет метода, связанного с делегатом.
private void InitializeComponent () { this.MouseDown = new System.WinForms.MouseEventHandler (this.Forml_MouseDown); } protected void Forml_MouseDown (object sender, System.WinForms.MouseEventArgs e) { }
Рис. 6.18. Добавление события с помощью кнопки Events (События)
Код обработчика события
- Чтобы установить координаты строки приветствия, добавьте код в обработчик события мыши (нажатие кнопки мыши). Не забудьте после этого вызвать метод Invalidate (Считать недействительным).
protected void Forml_MouseDown (object sender, System WinForms.MouseEventArgs e) { x = e X; у = e Y; Invalidate(); }
- Скомпонуйте и выполните проект. Теперь по щелчку мыши (любой кнопкой) приветствие должно перемещаться. Проект сейчас находится на шаге 2 разработки и соответствует проекту, хранящемуся в папке VsForm\Step2.
Вместо того, чтобы переносить каждую строчку кода, созданного на С#, в файл Forml.cpp проекта VsForm\Step2, просто сделайте копию проекта VsFormPortXStepl, который уже получен с помощью переноса кода. Потом перенесите несколько строчек кода, связанных с событием MouseDown (Кнопка мыши нажата) из VsForm\Step2.
void InitializeComponent() { MouseDown += new System::Windows::Forms:-MouseEventHandler (this, Forml_MouseDown); } void Forml_MouseDown (Object *sender, System::Windows::Forms::MouseEventArgs *e) { x = (float)e › X; // с плавающей точкой у = (float)e › Y; // с плавающей точкой Invalidate(); }