Події в сторінкових діалогах C + + Builder

Створити сторінковий діалог просто Працювати з подіями сторінкового діалогу має бать так само просто, чи не так І так і ні Описати обробник події для сторінкового діалогу просто, оскільки всі обробники подій містяться в системі CBuilder Визначити, яке подія вам треба відстежити і як його обробити – це окрема історія

Перша подія в сторінковому діалозі, яке може мати для нас якесь значення, ця подія OnTabChanging (при переході на сторінку) Ця подія – член обєкта форми PageControl Воно відбувається, коли користувач вибирає нову сторінку Обєкт PageControl викликає обробник події для обєкта поточної форми PageControl, щоб перевірити, чи можна піти з цієї форми У нашому першому прикладі ми влаштуємо деяку перевірку того, чи дійсно можна піти з поточної сторінки і як цього уникнути

На першу сторінку додайте три поля редагування, а над ними статичне текстове поле

«Введіть текст в одне з нижчих полів» Встановіть властивість Text всіх трьох полів редагування в порожнє значення Ви можете зробити це швидко, вибравши всі три поля редагування і видаливши текст в поле властивості Text в Object Inspector Перебуваючи в ньому, змініть назви сторінок, вибираючи обєкти TabSheet і змінюючи їх властивість Caption Першу сторінку озаглавьте Сторінка 1, друга – Сторінка 2, третій – Сторінка 3 Коли ви закінчите, перша сторінка буде виглядати, як показано на рис 412

Рис 412 Перша сторінка сторінкового діалогу

Додайте новий обробник для події OnTabChanging, вибравши PageControl (ви можете це зробити, клацнувши мишею у полі сторінки діалогу) і звернувшись до сторінці Events в Object Inspector Озаглавьте новий обробник події HandlePageChanging У обробник HandlePageChanging додайте наступний код:

void __fastcall TPageDlg::HandlePageChanging(TObject *Sender,

bool &ampAllowChange)

{

/ / Якщо це перша сторінка, то покинути її можна

/ / Тільки після того, як ввели значення в

/ / Одне з полів редагування

if ( PageControl-&gtActivePage == TabSheet1 )

{

if ( Edit1-&gtText == &quot&quot &amp&amp Edit1-&gtText == &quot&quot &amp&amp Edit1-&gtText == &quot&quot )

{

MessageBox (NULL, Ви ПОВИННІ ввести текст”, Помилка, MB_OK)

Edit1-&gtSetFocus() AllowChange = false return

}

}

/ / Інакше запамятовуємо активну сторінку

FnCurTab = PageControl1-&gtActivePage-&gtPageIndex

}

Вам треба додати опис змінної FnCurTab в заголовний файл Наступний рядок додайте в секцію приватних оголошень заголовного файлу форми:

int FnCurTab

У коді, щойно доданому вами в обробник, є пара важливих для нас моментів Перший

– Це концепція активної сторінки У кожного обєкта PageControl є єдина активна сторінка У випадку події OnTabChanging активної сторінкою буде та, з якою ми збираємося піти, а не та, на якій клацнув мишею користувач Таким чином, подія OnTabChanging використовується для перевірки вводу, здійсненого в поточній формі Властивість ActivePage – це просто покажчик на одну зі сторінок сторінкового діалогу І в нашій перевірці ми зясовуємо, чи є активна сторінка (тобто та, з якою ми збираємося піти) першого Якщо так, то ми перевіряємо, введено чи що-небудь хоча б в одне з полів редагування Адже про це, зрештою, просить напис на цій сторінці

Якщо всі поля редагування порожні, тобто якщо в них нічого не було введено, то програма виводить вікно повідомлення про помилку, встановлює курсор в перше поле редагування і змінює значення параметра AllowChange в false Це утримує сторінковий керуючий елемент від переходу якою б не було іншої сторінці

Якщо користувач все ж щось ввів в одне з полів, ми повинні дозволити йому перейти на іншу сторінку У цьому випадку ми просто залишаємо параметр AllowChange без змін, адже

його значення за замовчуванням є true Далі ми запамятовуємо поточну сторінку (ту, яка була відображена) для подальшого використання

Звідки ми знаємо, що AllowChange – вихідний параметр методу В основному CBuilder передає обєкти, які не повинні змінюватися методом, за значенням або за вказівником Параметри ж, які можуть бути змінені методом, передаються за посиланням Посилання на обєкт – це імя обєкта, перед яким стоїть символ & (Амперсанд), наприклад, bool & AllowChanges, а не bool AllowChanges

Якщо ви тепер скомпілюєте і запустіть додаток, то побачите, що з першої сторінки не можна піти, не ввівши чогось хоча б в одне поле редагування Це не обмежує вас від введення значень більш, ніж в одне поле і жодним чином не перевіряє вводяться значення Просто проводиться перевірка, що якась інформація введена Таким же точно чином можна перевірити і допустимість даних, що вводяться, і кількість заповнених полів

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*