Главная страница
Навигация по странице:

  • Свойства Значения

  • Компонент Компонент находится в списке All Windows Forms

  • Маскирующий символ Описание

  • All Windows Forms

  • Пример: домашний телефонный справочник

  • Борис Пахомов Санкт Петербург бхв петербург 2013 удк 004. 4 Ббк 32. 973. 26018. 2 П


    Скачать 17.38 Mb.
    НазваниеБорис Пахомов Санкт Петербург бхв петербург 2013 удк 004. 4 Ббк 32. 973. 26018. 2 П
    АнкорMS Visual C.pdf
    Дата04.08.2018
    Размер17.38 Mb.
    Формат файлаpdf
    Имя файлаMS Visual C.pdf
    ТипДокументы
    #22453
    страница25 из 37
    1   ...   21   22   23   24   25   26   27   28   ...   37

    Свойства
    Значения
    Items
    Высший уровень опасности
    Средний уровень опасности
    Низкий уровень опасности
    200;500
    DropDownWidth
    150
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    313 Таблица 11.4

    (окончание)
    Свойства
    Значения
    DropDownHeight
    300
    DropDownStyle
    DropDown Затем были сформированы обработчики событий
    DrawItem и Остальные пояснения — в комментариях листинга 11.8. Листинг 11.8

    #pragma once namespace ComboBox32011 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing;
    ///
    /// Summary for Form1
    ///
    public ref class Form1 : public System::Windows::Forms::Form
    { public:
    Form1(void)
    {
    InitializeComponent();
    //
    //TODO: Add the constructor code here
    //
    } protected:
    ///
    /// Clean up any resources being used.
    ///

    Form1()
    { if (components)
    { delete components;
    }
    }

    314 Часть II. Приложения Windows Form
    private: System::Windows::Forms::ComboBox^ comboBox1; protected: protected: protected: private:
    ///
    /// Required designer variable.
    ///

    System::ComponentModel::Container ^components;
    #pragma region Windows Form Designer generated code
    ///
    /// Required method for Designer support — do not modify
    /// the contents of this method with the code editor.
    ///
    void InitializeComponent(void)
    { this->comboBox1 = (gcnew System::Windows::Forms::ComboBox()); this->SuspendLayout();
    //
    // comboBox1
    // this->comboBox1->DrawMode =
    System::Windows::Forms::DrawMode::OwnerDrawVariable; this->comboBox1->DropDownHeight = 300; this->comboBox1->DropDownWidth = 150; this->comboBox1->FormattingEnabled = true; this->comboBox1->IntegralHeight = false; this->comboBox1->Items->AddRange(gcnew cli::array< System::
    Object^ >(3) {L" Высший уровень опасности, L" Средний уровень опасности,
    L" Низкий уровень опасности this->comboBox1->Location = System::Drawing::Point(10, 20); this->comboBox1->Name = L"comboBox1"; this->comboBox1->Size = System::Drawing::Size(200, 23); this->comboBox1->TabIndex = 1; this->comboBox1->DrawItem += gcnew
    System::Windows::Forms::DrawItemEventHandler(this,
    &Form1::comboBox1_DrawItem_1); this->comboBox1->MeasureItem += gcnew
    System::Windows::Forms::MeasureItemEventHandler(this,
    &Form1::comboBox1_MeasureItem_1);
    //
    // Form1
    //
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    315
    this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(251, 178); this->Controls->Add(this->comboBox1); this->Name = L"Form1"; this->Text = L"Form1"; this->ResumeLayout(false);
    }
    #pragma endregion
    //------------------------------------------------------------------------- private: System::Void comboBox1_MeasureItem_1(System::Object^ sender,
    System::Windows::Forms::MeasureItemEventArgs^ e)
    {
    /* Если вы установили значение свойства DrawMode в OwnerDrawVariable, то должны обработать событие MeasureItem. В его обработчике надо установить размеры элемента ComboBox: его высоту (height) и ширину (width) перед тем, как этот элемент будет прорисован
    */ switch ( e->Index выдается индекс элемента, для которого вычисляются
    высота и ширина
    { case 0: e->ItemHeight = 40; высота для элемента с индексом 0 break; case 1: e->ItemHeight = 30; break; case 2: e->ItemHeight = 20; break;
    } e->ItemWidth = 100; ширина
    } метод private: System::Void comboBox1_DrawItem_1(System::Object^ sender,
    System::Windows::Forms::DrawItemEventArgs^ e)
    {
    /* Событие наступает, когда мы щелкаем на кнопке открытия списка. В этом обработчике идет прорисовка элементов ComboBox. Для случая нашего примера надо нарисовать прямоугольники (они будут служить элементами списка) и закрасить их в разные цвета. Кроме того, надо будет задать характеристики шрифта для вывода наименований выбранных элементов
    */

    316 Часть II. Приложения Windows Form
    float size = 0;
    System::Drawing::Font^ myFont;
    FontFamily^ family = nullptr;
    System::Drawing::Color DangerColor; switch ( e->Index )
    { case 0: size = 20;
    DangerColor = System::Drawing::Color::Red; family = FontFamily::GenericSansSerif; break; case 1: size = 30;
    DangerColor = System::Drawing::Color::Gold; family = FontFamily::GenericMonospace; break; case 2: size = 40;
    DangerColor = System::Drawing::Color::LawnGreen; family = FontFamily::GenericSansSerif; break;
    }
    // Рисование фона элемента e->DrawBackground();
    /* Создание прямоугольника и заполнение его цветами уровней опасности. Изменение размеров прямоугольников, основанных на длинах имени каждого элемента
    */
    Rectangle rectangle = Rectangle( 2, e->Bounds.Top + 2, e->Bounds.Height, e->Bounds.Height — 4 ); e->Graphics->FillRectangle( gcnew SolidBrush( DangerColor ), rectangle );
    /* Создание текста для каждого элемента с использованием размеров, цвета и шрифта каждого элемента
    */ myFont = gcnew System::Drawing::Font( family, size, FontStyle::Bold );
    /*
    Создание фокуса ввода для каждого элемента (те. для прямоугольника. Если курсор мыши появляется над элементом, то при передаче фокуса элементу, он подсвечивается
    */ e->DrawFocusRectangle();
    }
    };
    } Результат работы показан на рис. 11.54.
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    317 Рис 11.54. Задание и обработка элементов
    ComboBox в виде цветных прямоугольников (полос)
    Компонент Компонент находится в списке All Windows Forms палитры компонентов. С помощью этого компонента создается редактируемое текстовое поле маска для ввода данных специфического формата дат, времени, номеров телефонов и т. д. Если вы задали формат ввода данных по конкретной маске, то при вводе текста проверяется, соответствует ли он этому формату. Маска налагает ограничения на символы, вводимые по маске, и на формат данных. Контроль ввода осуществляется посимвольно: если пользователь попытается ввести запрещенный в маске символ, то этот символ системой контроля будет отвергнут. Компонент использует специальный синтаксис для объявления маски. Маска задается в свойстве
    Mask
    . Существуют стандартные маски, их перечень открывается в диалоговом окне, в которое можно войти из свойства
    Mask
    . Но можно и самому задать маску в этом свойстве, пользуясь специальными символами. В табл. 11.5 приведен перечень специальных символов, задающих маску. Таблица Перечень специальных символов, задающих маску

    Маскирующий
    символ
    Описание
    0 Указывает, что на этом месте должна быть цифра, обязательная к вводу любая цифра от нуля до девяти Указывает, что на этом месте может быть (ноне обязательно) цифра или пробел
    # Указывает, что на этом месте может быть (ноне обязательно) цифра или пробел. Если эта позиция в маске не будет заполнена, тов свойство
    Text выводится пробел. Допускаются знаки + и –
    L Указывает, что на этом месте должна быть (обязательно) буква и только из диапазона ASCII

    318 Часть II. Приложения Windows Таблица 11.5

    (окончание)
    Маскирующий
    символ
    Описание
    ? Указывает, что на этом месте может быть (необязательно) буква и только из диапазона ASCII
    & Указывает, что на этом месте должен быть (обязательно) символ. Если свойство AsciiOnly установлено в true, то этот элемент ведет себя как элемент L
    C Указывает, что на этом месте может быть (необязательно) любой символ. Если свойство AsciiOnly установлено в true, то этот элемент ведет себя как элемент ?
    A Указывает, что на этом месте может быть (необязательно) любая буква или цифра. Если свойство AsciiOnly установлено в true, тоне отвергаются только символы кода ASCII (a-z и A-Z
    ) a Указывает, что на этом месте может быть (необязательно) любая буква или цифра. Если свойство AsciiOnly установлено в true, тоне отвергаются только символы кода ASCII (a-z и A-Z
    )
    . (точка) Разделитель десятичный, (запятая) Разделитель тысяч Разделитель времени Разделитель даты Символ валюты Преобразует все символы к нижнему регистру
    > Преобразует все символы к верхнему регистру Запрещает влияние элементов < или >
    \ Теряется маска- символ. Он заменяется символом- литералом (например, маска заменяется на маску ____0). Элемент это элемент для обратного слэша Все остальные символы
    Все немаскированные символы появляются в поле ввода. Символы- литералы всегда занимают в маске статическую позицию в режиме исполнения приложения и не могут быть передвинуты или удалены пользователем Используя маску, можно без написания специальных участков программы в приложении добиться следующего вводить символы заданного типа и никакие другие (например, только цифры обеспечить обязательный ввод символов в поле ввода за счет ввода в маску специальных символов-литералов, которые будут составлять неотъемлемую часть введенной строки, обеспечить ускорение ввода информации для пользователя (например, дефис в телефонном номере, точки в дате, знак валюты в цене и др
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    319 задавать специальный ввод, когда будут автоматически преобразованы, например, символы нижнего регистра в верхний и т. д. В маске содержится символ-подсказка (он задается в свойстве
    PromptChar
    ), на место которогопользователь должен вводить символы-данные. Например, маска даты может иметь вид
    "__.__.____" Здесь символом-подсказкой является подчеркивание, а символом-литералом — точка. Вместо символа-подсказки надо вводить цифры даты (например, 19.03.2012). Точку (символ-литерал) вводить не надо — она автоматически пропускается при наборе цифр. Вид
    MaskedTextBox в форме и пример выбора маски показан на рис. 11.55. Рис 11.55. Вид
    MaskedTextBox в форме и пример выбора маски
    Свойства Перечень свойств показан на рис. 11.56, описания некоторых свойств приведены далее.

    PromptChar
    — предоставляет возможность задавать свой собственный символ маски. Вместо подчеркивания можно задать, например, символ *. Тогда маска даты станет выглядеть так **.**.****. Это будет более наглядно, т. к. знак подчеркивания сливается всплошную линию.

    HidePromptOnLeave
    — предоставляет возможность видеть символы-литералы даже в то время, когда сам компонент теряет фокус ввода.

    320 Часть II. Приложения Windows Ввод по маске осуществляется так действительно вводимые символы заменяют собой символы маски, а постоянно заданные символы (например, точки в дате) пропускаются, когда указатель ввода в поле доходит до них. Система просто передвигает указатель ввода наследующий символ-подсказку. Если же пользователь вводит запрещенный маской символ, то возникает событие
    MaskInputRejected отвергнутый маской ввод, позволяющее в его обработчике осуществить какую- то пользовательскую реакцию. Рис 11.56. Свойства
    MaskedTextBox

    MaskFull
    — позволяет проверить, всели требуемые символы маски введены (например, вы вводили дату и не заметили, что вместо восьми символов ввели только семь — при большой скорости ввода это всегда может произойти. Поэтому данный момент надо программно контролировать. Пример задания такого контроля показан на рис. 11.57, текст обработчика — в листинге 11.9. Листинг 11.9

    private: System::Void maskedTextBox1_KeyDown(System::Object^ sender,
    System::Windows::Forms::KeyEventArgs^ e)
    { if(e->KeyCode == Keys::Enter)
    { if(this->maskedTextBox1->MaskFull == false)
    {
    Дата введена не полностью, "Приложение
    56", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    321
    this->textBox1->Clear(); this->maskedTextBox1->Clear(); return;
    } this->textBox1->Text=this->maskedTextBox1->Text;
    }
    } Рис 11.57. Контроль на полноту ввода по маске — возвращает строку, введенную по маске.

    TextMaskFormat
    — определяет, как символы-литералы и подсказка взаимодействуют, когда генерируется форматная строка (те. строка, введенная по маске. Точнее, это свойство задает, будут ли они (оба вместе или по отдельности) включены в итоговую строку (в свойство
    Text
    ). Если исключаются символы- подсказки, то они заменяются пробелами.

    AsciiOnly
    — используется для ограничения ввода (могут вводиться только символы и 0—9), хотя среда программирования поддерживает все символы. Их, как известно, намного больше, чем символов ASCII (последние кодируются на основе кода длиной в 8 битов, а первые — на основе 16 битов, те. ясно, что 2 16
    > 2 8
    ). Компонент СheckedListBox
    Компонент находится в списке All Windows Forms палитры компонентов. Компонент является расширением
    ListBox
    . Он делает почти все, что дела

    322 Часть II. Приложения Windows Form
    ет
    ListBox
    , но дополнительно выводит окна контроля (флажки-переключатели), в которых можно делать отметку галочкой. Вид компонента показан на рис. 11.58. Пользователь может помечать элементы списка, щелкая мышью на одной или нескольких позициях (устанавливать флажок. Повторный щелчок снимает включение флажка. Выбор элемента списка еще не означает, что флажок устанавливается. Рис 11.58. Вид компонента
    CheckedListBox
    , помещенного в форму
    Существует свойство
    CheckOnClick
    , которое разрешает/запрещает делать пометку
    (устанавливать/снимать флажок. Если это свойство установлено в false
    , то при щелчке мышью на позиции галочка (флажок) в ней не появится. Но одновременно со щелчком на позиции идет подсветка строки. Если повторно щелкнуть на отмеченной строке, то галочка появится. Таким образом, при значении свойства
    CheckOnClick
    , установленным в false
    , для включения флажка надо сначала отметить элемент списка (щелчком на строке, потом сделать повторный щелчок. А выключается флажок при щелчке на строке или на нем самом. Если же
    CheckOnClick установлено в true
    , то флажок включается одновременно с выбором элемента (и выключается при повторном щелчке на нем. Существует свойство
    ThreeDCheckBoxes
    , которое определяет стиль окна флажка (будет ли оно в стиле
    Flat или
    Normal
    ). Если значение свойства равно true
    , то стиль
    Flat
    , иначе — Перечень свойств компонента, отображенных в его окне Properties, показан на рис. 11.59.
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    323 Рис 11.59. Свойства компонента Компонент CheckedListBox поддерживает три состояния флажка

    Checked
    — флажок включен

    Unchecked
    — флажок выключен

    Indeterminate
    — состояние неопределенности (флажок закрашен в серый цвет. Такое состояние можно устанавливать только в режиме исполнения, те. программно (т. к. этого механизма выполнения в режиме дизайна нет. Существуют методы
    CheckedListBox
    , с помощью которых можно определять и устанавливать состояние флажка

    GetItemCheckState (int index)
    ;

    SetItemCheckState (int index, CheckState Здесь

    index
    — это индекс того элемента, состояние флажка которого определяется

    CheckState value
    — значение состояния флажка. Состояние определено классом
    CheckState и имеет три значения (
    Checked
    ,
    Unchecked
    ,
    Indeterminate
    — им соответствуют числовые значения 1, 0 и 2). Приведем пример задания состояния флажков и определения их состояния. Текст обработчика события
    DoubleClick компонента
    CheckedListBox приведен в листинге Часть II. Приложения Windows Листинг 1
    1.10
    private: System::Void checkedListBox1_DoubleClick(System::Object^ sender,
    System::EventArgs^ e)
    { this->checkedListBox1->SetItemCheckState(0,
    CheckState::Checked); this->checkedListBox1->SetItemCheckState(1,
    CheckState::Unchecked); this->checkedListBox1->SetItemCheckState(2,
    CheckState::Indeterminate); int i=(int)this->checkedListBox1->GetItemCheckState(0);
    } Здесь задаются состояния для флажков 1, 2 и й строк. Последний оператор определяет состояние й строки. Так как тип результата, выдаваемого методом
    GetItemCheckState()
    , — это тип
    CheckState
    , то, чтобы увидеть состояние, надо этот тип привести к типу int принудительно. Поэтому после знака присвоения стоит Чтобы узнать, помечен ли элемент списка, можно выполнить оператор bool Результат метода
    GetItemChecked()
    — логическая переменная, i
    — индекс элемента. Можно и другим способом установить флажок. Для этого следует выполнить оператор, Здесь

    3
    — индекс элемента (я строка

    1
    — булево значение true
    (второй параметр этого метода имеет булевый тип. Обратим внимание на событие
    ItemCheck
    , которое возникает, когда состояние флажка меняется. Оно пригодится при обработке выборки из СВ С можно также загружать текстовые строки из файла, как и для
    ListBox
    . Программа будет такая же, только в ней надо заменить
    ListBox на
    СheckedListBox
    Пример: домашний телефонный справочник
    Приведем пример приложения для домашнего телефонного справочника, построенного с использованием компонента С. Справочник должен содержать номера телефонов и специальный ящик (горячий ящик, в котором будут храниться самые необходимые из всего списка телефоны (чтобы ими можно было бы
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    325
    стро воспользоваться. В ящик будут посылаться только те телефоны, которые в списке будут помечаться галочками (те. их флажки будут включены. Как только флажок выключается, номер телефона из горячего ящика удаляется. Однако строку из горячего ящика можно удалить и по щелчку мыши на ней. Итак, приложение работает следующим образом как только оно загружается для выполнения (фактически загружается форма, автоматически читаются два текстовых файла, в которых находятся сведения о предыдущей работе приложения (перед тем, как форме появиться на экране, срабатывает событие
    Shown
    , в обработчик которого помещены операторы загрузки файлов. Этими файлами заполняется содержимое двух контейнеров компонента
    ChekedListBox и компонента
    ComboBox
    . Далее приложение работает в обычном режиме строки можно добавлять в оба контейнера и удалять из каждого в отдельности. Как только приложение завершит свою работу (кнопка Выход, содержимое контейнеров сохранится в соответствующих файлах (чтобы оно при выгрузке не исчезало. Отсюда возникает проблема первоначального запуска приложения надо вручную сформировать указанные два файла (их имена указаны в тексте приложения, которое, надеюсь, читатель сам создаст у себя заново и выберет те имена файлов, которые ему подойдут. Надо взять обыкновенный WordPad (ноне Блокнот будут проблемы с кодировкой) и сего помощью создать пустые текстовые файлы. А далее в приложении вы сами введете те тексты, которые вам нужны. Форма приложения в режиме дизайна приведена на риса текст — в листинге (приведен полностью файл, чтобы можно было видеть всю структуру приложения и места вставки пользовательских функций работы с файлами. Результаты работы приложения показаны на рис. 11.61—11.63. Рис 11.60. Форма приложения "Домашний телефонный справочник

    326 Часть II. Приложения Windows Рис 1
    1   ...   21   22   23   24   25   26   27   28   ...   37


    написать администратору сайта