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

  • TabControl Tasks

  • Листинг 11.20

  • Борис Пахомов Санкт Петербург бхв петербург 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
    страница29 из 37
    1   ...   25   26   27   28   29   30   31   32   ...   37

    Листинг 11.18
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    { this->Close();
    } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
    {
    String ^s;
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    367
    System::DateTime date1 = System::DateTime( 2010, 6, 3, 22, 15, 0 );
    System::DateTime date2 = System::DateTime( 2010, 12, 6, 13, 2, 0 ); Это один из конструкторов класса DateTime, инициализирующий экземпляр класса значениями (год, месяц, число, часы, минуты, секунды
    System::DateTime date3 = System::DateTime( 2010, 10, 12, 8, 42, 0 );
    // diff1 (разность) равна 185 дней, 14 часов, 47 минут.
    // Класс TimeSpan задает интервал времени. У него есть свои события и методы
    System::TimeSpan diff1 = date2.Subtract( date1 ); this->listBox1->Items->Add(date2.ToString()); this->listBox2->Items->Add(date1.ToString()); this->listBox3->Items->Add(diff1.ToString());
    // date4 получается 17:55:00
    System::DateTime date4 = date3.Subtract( diff1 ); this->listBox1->Items->Add(date3.ToString()); this->listBox2->Items->Add(diff1.ToString()); this->listBox3->Items->Add(date4.ToString());
    // diff2 (разность) равна 55 дней, 4 часа, 20 минут.
    System::TimeSpan diff2 = date2 — date3; this->listBox1->Items->Add(date2.ToString()); this->listBox2->Items->Add(date3.ToString()); this->listBox3->Items->Add(diff2.ToString());
    // date5 получается 17:55:00
    System::DateTime date5 = date1 — diff2; this->listBox1->Items->Add(date1.ToString()); this->listBox2->Items->Add(diff2.ToString()); this->listBox3->Items->Add(date5.ToString());
    } Теперь посмотрим, как работают некоторые методы работы с датами. На рис. 11.77 показаны результаты сложения дат и вид формы с компонентами, обеспечивающими эти операции. К первому слагаемому добавлялось построчно количество дней, месяцев и лет. Проверялись методы
    Add()
    ,
    AddDays()
    ,
    AddMonths()
    , В листинге 11.19 приведен текст программы этого приложения. Листинг 11.19
    #pragma once namespace AddDate2011 { using namespace System; using namespace System::ComponentModel;

    368 Часть II. Приложения Windows Form
    using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Globalization; //for FormatInfo
    ///
    /// 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;
    }
    } private: System::Windows::Forms::Button^ button1; protected: private: System::Windows::Forms::Button^ button2; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Label^ label2; private: System::Windows::Forms::Label^ label3; private: System::Windows::Forms::ListBox^ listBox1; private: System::Windows::Forms::ListBox^ listBox2; private: System::Windows::Forms::ListBox^ listBox3; private:
    ///
    /// Required designer variable.
    ///

    System::ComponentModel::Container ^components;
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    369
    #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->button1 = (gcnew System::Windows::Forms::Button()); this->button2 = (gcnew System::Windows::Forms::Button()); this->label1 = (gcnew System::Windows::Forms::Label()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label3 = (gcnew System::Windows::Forms::Label()); this->listBox1 = (gcnew System::Windows::Forms::ListBox()); this->listBox2 = (gcnew System::Windows::Forms::ListBox()); this->listBox3 = (gcnew System::Windows::Forms::ListBox()); this->SuspendLayout();
    //
    // button1
    // this->button1->Location = System::Drawing::Point(13, 13); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(75, 23); this->button1->TabIndex = 0; this->button1->Text = Пуск this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this,&Form1::button1_Click);
    //
    // button2
    // this->button2->Location = System::Drawing::Point(387, 12); this->button2->Name = L"button2"; this->button2->Size = System::Drawing::Size(75, 23); this->button2->TabIndex = 1; this->button2->Text = Выход this->button2->UseVisualStyleBackColor = true; this->button2->Click += gcnew System::EventHandler(this,
    &Form1::button2_Click);
    //
    // label1
    // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(13, 56); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(102, 17); this->label1->TabIndex = 2; this->label1->Text = е слагаемое

    370 Часть II. Приложения Windows Form
    //
    // label2
    // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(193, 56); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(102, 17); this->label2->TabIndex = 3; this->label2->Text = е слагаемое
    //
    // label3
    // this->label3->AutoSize = true; this->label3->Location = System::Drawing::Point(355, 56); this->label3->Name = L"label3"; this->label3->Size = System::Drawing::Size(76, 17); this->label3->TabIndex = 4; this->label3->Text = Результат
    //
    // listBox1
    // this->listBox1->FormattingEnabled = true; this->listBox1->ItemHeight = 16; this->listBox1->Location = System::Drawing::Point(16, 85); this->listBox1->Name = L"listBox1"; this->listBox1->Size = System::Drawing::Size(161, 84); this->listBox1->TabIndex = 5;
    //
    // listBox2
    // this->listBox2->FormattingEnabled = true; this->listBox2->ItemHeight = 16; this->listBox2->Location = System::Drawing::Point(196, 85); this->listBox2->Name = L"listBox2"; this->listBox2->Size = System::Drawing::Size(156, 84); this->listBox2->TabIndex = 6;
    //
    // listBox3
    // this->listBox3->FormattingEnabled = true; this->listBox3->ItemHeight = 16; this->listBox3->Location = System::Drawing::Point(358, 85); this->listBox3->Name = L"listBox3"; this->listBox3->Size = System::Drawing::Size(138, 84); this->listBox3->TabIndex = 7;
    //
    // Form1
    //
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    371
    this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(498, 174); this->Controls->Add(this->listBox3); this->Controls->Add(this->listBox2); this->Controls->Add(this->listBox1); this->Controls->Add(this->label3); this->Controls->Add(this->label2); this->Controls->Add(this->label1); this->Controls->Add(this->button2); this->Controls->Add(this->button1); this->Name = L"Form1"; this->Text = Сложение дат this->ResumeLayout(false); this->PerformLayout();
    }
    #pragma endregion private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
    { this->Close();
    } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    {
    String ^s; Метод Add()- добавляет интервал времени к данной дате
    Интервал задается данными класса TimeSpan: запускают один из его конструкторов, который и задает добавку в днях к данному экземпляру даты Здесь подсчитывается, какой день недели будет, если к текущей дате добавить 36 дней
    System::DateTime today = System::DateTime::Now; текущая дата
    System::TimeSpan duration( 36, 0, 0, 0 ); Конструктор придает начальные значения членам класса задаются количество дней, часы, минуты, секунды.
    Фактически это структура й элемент — интервал времени в днях,
    й элемент — интервал времени в часах и т. д.
    Мы станем использовать интервал "количество дней
    System::DateTime answer = today.Add( duration ); Эта функция добавляет данные структуры duration к данным структуры даты s=answer.ToString("dddd",DateTimeFormatInfo::CurrentInfo);

    372 Часть II. Приложения Windows вывод даты в строку с учетом Региональных настроек this->listBox3->Items->Add(s); запись результата в ListBox s=today.ToString("dd/MM/yyyy г, dddd", DateTimeFormatInfo::CurrentInfo); this->listBox1->Items->Add(s); запись го слагаемого в ListBox s=duration.ToString(); this->listBox2->Items->Add(s); запись го слагаемого в ListBox
    //=============================================================== Проверка функции добавления дней к дате double d=36; answer = today.AddDays( d ); s=answer.ToString("dddd",DateTimeFormatInfo::CurrentInfo); вывод даты в строку с учетом региональных настроек this->listBox3->Items->Add(s); запись результата в ListBox s=today.ToString("dd/MM/yyyy г, dddd", DateTimeFormatInfo::CurrentInfo); this->listBox1->Items->Add(s); запись го слагаемого в ListBox s=d.ToString(); this->listBox2->Items->Add(s); запись го слагаемого в ListBox
    //============================================================== Проверка функции добавления месяцев к дате int d1=36; answer = today.AddMonths( d1 ); s=answer.ToString("dddd",DateTimeFormatInfo::CurrentInfo); вывод даты в строку с учетом региональных настроек this->listBox3->Items->Add(s); запись результата в ListBox s=today.ToString("dd/MM/yyyy г, dddd", DateTimeFormatInfo::CurrentInfo); this->listBox1->Items->Add(s); запись го слагаемого в ListBox s=d1.ToString(); this->listBox2->Items->Add(s); запись го слагаемого в ListBox
    //=============================================================== Проверка функции добавления лет к дате int d2=36; answer = today.AddYears( d2 ); s=answer.ToString("dddd",DateTimeFormatInfo::CurrentInfo); вывод даты в строку с учетом региональных настроек this->listBox3->Items->Add(s); запись результата в ListBox s=today.ToString("dd/MM/yyyy г, dddd", DateTimeFormatInfo::CurrentInfo);
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    373
    this->listBox1->Items->Add(s); запись го слагаемого в ListBox s=d2.ToString(); this->listBox2->Items->Add(s); запись го слагаемого в ListBox
    }
    };
    } На рис 11.77 последние две строки результата получились странными, потому что второе слагаемое

    это уже не дни, а месяцы и годы.
    Компонент Компонент находится в списке All Windows Forms палитры компонентов. Он позволяет построить набор страниц, которые друг друга перекрывают на экране и которые можно перелистывать. Но главная их ценность в том, что на эти страницы, находящиеся в рамках одной формы, где размещен сам компонент
    TabControl
    , можно помещать другие компоненты, тем самым расширяя возможности формы. Например, вы должны разработать приложение по управлению кадрами предприятия. Все компоненты, обеспечивающие решение этой проблемы, можно разместить водной форме, нона разных страницах компонента
    TabControl
    , который достаточно поместить в форму. На каждой странице вы можете разместить по одному справочнику и организовать на ней ведение справочника, на других страницах можете разместить элементы управления для получения аналитических таблиц и т. д. Чтобы переключаться между страницами, достаточно щелкнуть мышью на любой из них. Вид компонента в форме с раскрытым диалоговым окном TabControl Tasks показан на рис. 11.78. Рис 11.78. Вид компонента
    TabControl в форме
    Самым важным свойством
    TabControl является свойство
    TabPages
    , которое содержит отдельные страницы. Каждая вкладка — это отдельный объект
    TabPage со своими свойствами, методами и событиями. Когда вы переключаетесь с одной страницы на другую, щелкая мышью на вкладке, возникает событие
    Click для объекта Часть II. Приложения Windows Как задавать страницы

    Поместите компонент
    TabControl в форму и откройте его диалоговое окно
    TabControl Tasks (см. рис. 11.78). Там есть две опции, позволяющие добавлять или удалять страницы. Перемещаться поуже сформированным страницам можно посредством щелчка мышью на вкладке каждой страницы. Если страницы не умещаются в поле компонента, то автоматически формируются кнопки прокрутки. Если вам неудобно работать с кнопками прокрутки, ивы хотите видеть все страницы сразу, тогда задайте значение свойства
    MultiLine равным true
    , — получите желаемый результат. Если случится, что не все вкладки в многостраничном режиме появляются, то следует установить свойство
    Width
    (ширина) для компонента
    TabControl на такое значение, чтобы ширина самого компонента была больше, чем ширина всех его вкладок. На вкладке можно поместить пиктограмму. Для чего это делается При эксплуатации приложения пользователям бывает некомфортно каждый раз вчитываться в название страницы на вкладке. Легче всего запоминается пиктограмма, на которую следует нажимать в необходимых случаях. Чтобы создать вкладки с пиктограммами, нужно в форму поместить компонент
    ImageList
    , задать в нем пиктограммы (их надо заранее заготовить в соответствующих файлах с расширением icon средствами Photoshop или другого инструмента, затем установить свойство
    ImageList компонента
    TabControl
    (привязать компонент
    ImageList через это свойство к компоненту
    TabControl
    ). Тогда все пиктограммы, находящиеся в списке компонента imageList
    , будут видны и на вкладках компонента Теперь следует активизировать нужную вкладку и ее свойство
    ImageIndex установить на индекс подходящей пиктограммы (когда вы откроете выпадающий список свойства вкладки ImageIndex
    , в нем будут видны все пиктограммы со значениями их индексов (номеров. При активизации вкладки могут возникнуть проблемы не всегда удается (из-за неопытности начинающего) переключаться с активного компонента на соответствующую вкладку
    TabPage
    . Если вы просто щелкните на вкладке, станет активным весь компонент
    TabControl
    . Если вы щелкните в поле страницы, которую открывает данная вкладка, то станет активной именно страница, те. объект
    TabPage
    . Вот сего свойствами и надо будет работать для задания пиктограммы на вкладке. Расположение вкладок в компоненте
    TabControl можно менять помещать их сверху, снизу, слева и справа. Достаточно выбрать соответствующее значение свойства
    Alignment компонента
    TabControl из выпадающего списка. Надо твердо помнить, что
    TabControl и
    TabPage
    (его составная часть) — это все-таки два разных объекта, которые можно по-своему настраивать с помощью их собственных свойств и методов. Все, что относится ко всем страницам, находится в
    TabControl
    . Все, что относится к отдельной странице, регулируется через компонент Вы можете изменить форму вкладок (не надо путать вкладку, как заголовок страницы, и вкладку в более широком смысле — в смысле страницы блокнота
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    375
    TabControl
    ). Для этого нужно воспользоваться свойством
    Appearance компонента
    TabControl
    — все вкладки могут одновременно изменять форму, а для отдельной вкладки это не имеет места (поскольку изменяется значение свойства главного компонента — родителя. Заголовки могут иметь три формы нормальную, в виде кнопок, в виде таких же кнопок, но разделенных между собой вертикальными полосами. Перечень свойств
    TabControl
    , отображенных в окне Properties, показан на рис. 11.79. Рис 11.79. Перечень свойств Мы задавали страницы компонента
    TabControl
    , используя его диалоговое окно, которое открывается кнопкой в правом верхнем углу активного компонента. Однако более удобный способ задания страниц — это воспользоваться его свойством
    TabPages
    . Если нажать кнопку с многоточием в поле этого свойства, то откроется знакомое нам по изучению предыдущих компонентов диалоговое окно для работы со страницами (рис. 11.80). Здесь можно не только добавлять, удалять, менять местами страницы, но также сразу устанавливать их основные свойства, не обращаясь кокну. Обратите внимание и наследующие два свойства

    SelectedIndex
    — свойство, которое содержит номер активной страницы (если ему присвоить целое значение, то страница с соответствующим номером (отсчет

    376 Часть II. Приложения Windows от нуля) станет активной (доступной. Если в
    TabControl ни одна страница не выбрана, то значение
    SelectedIndex равно –1. Если надо программно открыть страницу, то следует выполнить такую команду например, для страницы 2): this->tabControl1->SelectedIndex = 1;

    SelectedTab
    — представляет собой выбранную страницу (объект
    TabPage
    ). Если требуется программно открыть страницу, то надо выполнить такую команду например, для страницы 2): this->tabControl1->SelectedTab = tabPage2; Рис 11.80. Диалоговое окно для работы со страницами
    Некоторые методы Из методов компонента отметим методы
    Hide()
    и позволяющие делать страницу невидимой и, наоборот, видимой. Представляет интерес метод имеющий три варианта реализации и позволяющий в режиме исполнения приложения активизировать нужную страницу. Здесь в качестве параметра задаются номер страницы (отсчет от нуля имя страницы, заданное в переменной типа
    String ^
    ; имя страницы, заданное в свойстве Форма приложения, демонстрирующего работу метода, а также результаты его выполнения приведены на рис. 11.81, тексты обработчиков — в листинге 11.20.
    Глава
    11. Компоненты, создающие интерфейс между пользователем и
    приложением
    377 Рис 11.81. Демонстрация работы метода активизации страниц
    Листинг 11.20
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    { if(i== 0)
    { this->tabControl1->SelectTab(i+1); i=1;
    } else
    { this->tabControl1->SelectTab(i-1); i=0;
    }
    } Переменная i
    объявлена как int i
    : private:
    ///
    /// Required designer variable. int i; Некоторые свойства страницы Каждая страница компонента
    TabControl представляет собой отдельный объект — экземпляр класса
    TabPage со своими свойствами, методами и событиями. Перечень некоторых свойств страницы, отображенных в окне
    1   ...   25   26   27   28   29   30   31   32   ...   37


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