Блокування закладки C + + Builder

Тепер, коли всі приготування закінчені, прийшов час скасувати сторінку Як я вже говорив раніше, неможливо заборонити цей керуючий елемент звичайним способом, тому нам доведеться діяти нишком

Коли вибирається сторінка в сторінковому діалозі, вона спочатку видає формі, на якій розташований елемент PageControl подія OnTabChanging для повірки того, чи можна піти з цієї сторінки Однак це нам анітрохи не допомагає, оскільки нас цікавить зовсім не активна сторінка А цікавить нас та сторінка, на якій користувач клацнув мишею, тобто та, на яку він хоче перейти На жаль, подія OnTabChanging не зможе поділитися з нами ніякої інформацією про цю сторінку (у нього її просто немає) Однак після того, як відбулася зміна поточної сторінки, елемент PageControl посилає формі інше подія Ця подія називається OnTabChange (по зміні сторінки) Додайте новий обробник для події OnTabChange і озаглавьте його HandlePageChange (обробка зміни сторінки) Наступний код додайте в обробник HandlePageChange:

void –fastcall TPagesDlg::HandlePageChange(TObject *Sender)

{

/ / Якщо третя сторінка стає активною,

/ / Перевіряємо, чи дозволено вона

if ( PageControl1-&gtActivePage-&gtPageIndex == 2 )

{

if ( FbAllowPageThree == false )

{

switch ( FnCurTab )

{

case 0: / / Перша сторінка

PageControl1-&gtActivePage = TabCheet1 break

case 1: / / Друга сторінка

PageControl1-&gtActivePage = TabCheet2 break

}

}

}

/ / Змінюємо заголовок форми, щоб відобразити

/ / Номер поточної сторінки

Caption = Працюємо з: +

PageControl1-&gtActivePage-&gtCaption

}

Коли користувач вибирає нову сторінку, викликається обробник події HandlePageChange Властивість ActivePage керуючого елемента PageControl буде переустановлені так, що стане вказувати на обрану сторінку (припустимо, що була обрана третя сторінка, – буде вказувати на третю) Ми перевіряємо, чи дійсно була обрана третя сторінка, за допомогою властивості PageIndex, що належить обєкту ActivePage Звичайно, ми б могли просто порівняти, чи є обєкт ActivePage еквівалентним обєкту TabSheet3, але мені просто хотілося показати вам ще один спосіб визначення номера сторінки Зрештою упевнившись яким завгодно способом, що обрана саме третя сторінка, ми перевіряємо, чи можна туди перейти

Якщо користувач до цього натискав кнопку Сторінка 3 заборонена, ми повинні запобігти переходу на третю сторінку При цьому змінна AllowPageThree встановлена ​​в false У цьому випадку ми зясовуємо, яка ж у нас була сторінка до цього (ми встановлювали номер останньої сторінки раніше, в методі OnPageChanging) і робимо цю сторінку активною Зверніть увагу на те, що тут не можна застосувати властивість PageIndex для зміни властивості ActivePage Змінюючи

властивість PageIndex, ви просто змінюєте порядок проходження сторінок в масиві сторінок всередині обєкта PageControl Ви просто перемістіть третю сторінку на другу позицію (і, отже, другу сторінку на третю позицію) Замість цього ми просто прирівнюємо властивість ActivePage до обєкта – сторінці, який ми хочемо зробити поточним (TabSheet1 або TabSheet2)

І на завершення ми встановлюємо заголовок форми в рядок «Працюємо з:», обєднану з заголовком поточної сторінки Це дасть користувачеві наочне уявлення про те, на якій сторінці він в даний момент працює, навіть якщо вся інша частина форми не видна Навіть якщо користувачеві довелося мінімізувати форму, заголовок все одно буде Працюємо з: сторінка 2 (якщо на даний момент поточної є друга сторінка), і він все одно буде знати, де знаходиться Як не дивно, але мені кілька разів доводилося працювати над проектами, в яких було необхідно надати користувачеві подібні можливості Що ж, вік живи – вік учись

На цьому ми завершуємо розгляд сторінкового діалогу Сторінковий діалог – дуже потужний спосіб зібрати воєдино однотипну інформацію у вигляді записної книжки з закладками Оскільки сторінкові діалоги знаходять все більш широке застосування і поступово стають частиною системи Windows 95, дуже важливо зрозуміти принципи роботи та можливості, що надаються цим компонентом, щоб використовувати його в своїх додатках CBuilder робить роботу з цим керуючим елементом настільки простий, що було б непростимо не використовувати цей компонент, тим більше, що він буває корисний досить часто

Джерело: Теллес М – 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>

*

*