Обработчики событий для пунктов меню
Начнем создавать функцию - обработчик события для пункта меню 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.