Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lesson3.doc
Скачиваний:
6
Добавлен:
28.09.2019
Размер:
1.92 Mб
Скачать

Обработчики событий для пунктов меню

Начнем создавать функцию - обработчик события для пункта меню Play. После двойного нажатия на пункт меню будет сгенерирован код:

private: System::Void playMenuItem_Click(System::Object^ sender,

System::EventArgs^ e) {

}

Это заготовка обработчика, не содержащая кода в теле функции. Первый параметр – описатель (handle), ссылающийся на элемент, от которого происходит событие. Второй аргумент связывает с информацией о событии. Тип первого аргумента в данном случае ToolStripMtnuItem^, так как функция – обработчик была вызвана при нажатии пункта меню Play. Имя функции-обработчика по умолчанию - playMenuItem_Click. Вы не должны менять имя функции в коде.

Моржно добавить обработчики для пунктов меню Limits->Upper, Limits->Lower и Help->About двойным нажатием на каждый из них. То же самое можно сделать и для контекстного меню.

Добавление элементов в класс Form1

Прежде чем писать обработчики, необходимо добавить дополнительные поля для хранения данных, которые ограничивают значения вводимых чисел. Переключитесь на Class View, кликните правой кнопкой мыши по пункту Form1 class, выберите Add-> Add Variable из контекстного меню.

Необходимо добавить следующие переменные как private:

Необходимо также добавить поле private типа Random к классу Form1:

Объект типа Random будет генерировать псевдо-случайные значения различных типов.

private:

// Number of values in Lotto entry

int lottoValuesCount;

// Number of values in Euromillions entry

int euroValuesCount;

// Number of stars in Euromillions entry

int euroStartsCount;

// Minimum value allowed in Lotto

int lottoLowerLimit;

// Maximum value allowed in Lotto

int lottoUpperLimit;

// Lower lotto range limit from user

int lottoUserMinimum;

// Upper lotto range limit from user

int lottoUserMaximum;

// Minimum value allowed in Euromillions

int euroLowerLimit;

// Maximum value allowed in Euromillions

int euroUpperLimit;

// Minimum stars value allowed in Euromillions

int euroStarsLowerLimit;

// Maximum stars value allowed in Euromillions

int euroStarsUpperLimit;

// Lower euro range limit from user

int euroUserMinimum;

// Upper euro range limit from user

int euroUserMaximum;

// Lower euro stars range limit from user

int euroStarsUserMinimum;

// Upper euro stars range limit from user

int euroStarsUserMaximum;

// генератор псевдо-случайных значений

Random^ random;

Все эти поля должны быть инициализированы с помощью конструктора. Убедитесь. Что конструктор выглядит примерно так:

Это все новые данные-элементы класса. Теперь можно вернуться к обработчикам.

Для чего нужен gcnew в С++?

1) Это аналог new в unmanaged C++.

gcnew используется в managed C++ (тот, который под .NET).

String ^s = gcnew Strng("blablabla");

2) выделяет динамическую память для данных в управляемой куче. следить за такой памятью и освобождать её уже забота сборщика мусора а не программиста. так мелко-мягкие решили проблему утечки памяти в винде

3) Операторы ^ и gcnew - это местные аналоги * и new из обычного C++, имеющие место в managed C++, он же C++ CLI.

http://msdn.microsoft.com/en-us/library/te3ecsc8(v=vs.80).aspx

gcnew creates an instance of a managed type (reference or value type) on the garbage collected heap. The result of the evaluation of a gcnew expression is a handle (^) to the type being created.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]