Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Базовый курс. Ч.3. Основы алгоритмизации и про- граммирования в среде Visual C++ 2005.pdf
Скачиваний:
53
Добавлен:
05.02.2023
Размер:
3.81 Mб
Скачать

166

private: System::Void textBox1_KeyPress (System:: Object^ sender, System:: Windows::Forms:: KeyPressEventArgs^ e)

{if (! ((e->KeyChar>='0') && (e->KeyChar<='9')

||(e->KeyChar==',')) ) e->KeyChar=Char(0); } };

Обратите внимание, у функции для этого события имеется параметр e->KeyChar, контролируя который мы и задаем ограничение на ввод значений. В данном случае: если нажимаемая клавиша не лежит в интервале от 0 до 9 и не является десятичной запятой, то символ не отображается (Char(0)).

3. ДИНАМИЧЕСКИЕ ССЫЛКИ НА ОБЪЕКТЫ

3.1 Понятие о динамических ссылках.

Помимо обычных непосредственных ссылок на объекты допустимы и так называемые динамические ссылки на объекты. Обычная ссылка, например, на свойство TabIndex кнопки Button имеет вид:

Button->TabIndex. Аналогичная динамическая ссылка имеет вид (Button^)sender->TabIndex . В чем преимущество (и не-

обходимость) динамических ссылок? В том, что можно подразумевать не один объект, а целую группу объектов. В результате можно

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

Пример 3-1. Организовать форму с семью кнопками, в зависимости от нажатия на которые будет меняться цвет формы(см. рис.

9.9). Причем для реализации события Click для всех кнопок использовать одну и ту же процедуру.

Итак, здесь потребуется разместить семь кнопок, сменить их названия и, главное, у каждой из них указать свой номер и свойства TabIndex: для кнопки «крас-

ный»

зададим 1, для

кнопки

«оранжевый» 2 и т.д. Затем соз-

дадим

событие

для

кнопки

«красный» следующего вида:

 

Рис. 9.9

167

switch (((Button^ )sender)->TabIndex)

{case 0: this->BackColor=Color::Red; break; case 1: this->BackColor=Color::Orange; break; case 2: this->BackColor=Color::Yellow; break; case 3: this->BackColor=Color::Green; break; case 4: this->BackColor=Color::SkyBlue; break; case 5: this->BackColor=Color::Blue; break; case 6: this->BackColor=Color::Violet; break;

case 7: this->BackColor=SystemColors::Control; break;

}

Далее в окне Properties перейдем на вкладку Events и укажем там, в строке Click (везде, для каждой кнопки!) ту же процедуру button1Click.

Остается запустить приложение (естественно, при этом сохранить проект и программу) и проверить кнопки в действии.

3.2. Программа «Калькулятор»

Пример 3-2. Создать программу «Калькулятор вида (рис. 9.10). Обеспечить выполнение нужных операций с отображением задаваемых цифр и результата на индикаторе.

Рис. 9.10

Разместим соответствующие цифровые кнопки. Выполним надписи. Для каждой из них укажем свойствоTabIndex, равным цифре на кнопке.

168

В окне кода после строк:

public ref class Form1 : public System::Windows:: Forms:: Form

{public:

опишем глобальные переменные:

int f;

// признак для проверки

//f=0 — вводится первый операнд операции

//f=1 – вводится второй

int oper; // код операции:

//0 – "=", 1- "+", 2 - "-", 3 - "*", 4 -"/" float accum; // результат операций

Создадим для кнопки «1» для события Click функцию следующего вида:

private: System::Void button9_Click(System::Object^ sender, System:: EventArgs^ e)

//функция отображения символа цифры

{Char Ch; // символ цифры

//преобразование цифры в ее символ

//т.е. код 0 есть 48, код 1 есть 49 и т.д. Ch=Char(((Button^)sender)->TabIndex+48); switch ( ((Button^)sender)->TabIndex)

{case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:

case 9: if (f = =0) {textBox1->Text=Ch.ToString();f=1;} else textBox1->Text=textBox1->Text+Ch.ToString(); }

f=1; }

Обратите внимание, что мы сразу предусмотрели и все другие цифры. Поэтому можем назначить эту же процедуру и всем остальным цифровым кнопкам, т.е. перейдем на вкладку Events и, последовательно выделяя каждую кнопку, событию Click для нее назначим ту же функцию button1Click.

Аналогично разместим кнопки для операций и для кнопки очистки С. Для кнопок операций также укажем свойствоTabIndex сле-

дующим образом: 0 – для «=», 1 – «+», 2 – «-», 3 – «*», 4 – «/».

Создадим процедуру, например, для кнопки «+»: