Программирование >>  Элементы языков с и с++ 

1 ... 123 124 125 [ 126 ] 127 128 129 ... 200


жен содержать номера телефонов и специальный ящик (горячий ящик), в котором будут храниться самые необходимые из всего списка телефоны (чтобы ими можно было быстро воспользоваться). В ящик будут посылаться только те телефоны, которые в списке будут помечаться галочками (т. е. их флажки будут включены). Как только флажок выключается, номер телефона из горячего ящика удаляется. Однако строку из горячего ящика можно удалить и по щелчку мыши на ней.

При создании приложения возникли проблемы с переводом текста на русский язык и с методами записи в файл строк типа string. Одни методы читают только английский текст, другие читают и русский, но у них имеются недостатки с переходом от типа string к типу char*. Поэтому применение аппарата обычных функций работы с файлами, таких как fopeno, fgetsO, fputs о, оказалось довольно затруднительным. Для упрощения проблем были выбраны два простейших метода чтения/записи одной строки типа string (см. по тексту листинга). Ввиду того, что справочник имеет довольно мало строк, их можно сцепить в одну длинную, с которой можно работать - записывать и читать. Этим проблема преобразования типов от string к char* была снята.

Итак, приложение работает следующим образом: как только оно зафужается для выполнения (фактически загружается форма), автоматически читаются два текстовых файла, в которых находятся сведения о предыдущей работе приложения (перед тем, как форме появиться на экране, срабатывает событие Load, в обработчик которого помещены операторы загрузки файлов). Этими файлами заполняется содержимое двух контейнеров: компонента chekedListBox И компонента ComboBox. Далее приложение работает в обычном режиме: строки можно добавлять в оба контейнера и удалять из каждого в отдельности. Как только приложение завершит свою работу (кнопка Выход), содержимое контейнеров сохранится в соответствующих файлах (чтобы оно при выгрузке не исчезало).

Отсюда возникает проблема первоначального запуска приложения: надо вручную сформировать указанные два файла (их имена указаны в тексте приложения, которое, надеюсь, читатель сам создаст у себя заново и выберет те имена файлов, которые ему подойдут). Можно взять обыкновенный WordPad (Блокнот) и с его помощью создать пустые текстовые файлы в кодировке UTF-8. А далее в приложении вы сами введете те тексты, которые вам нужны.

Форма приложения приведена на рис. 11.76, а текст- в листинге 11.12 (приведен полностью h-файл, чтобы можно было видеть всю структуру приложе-



I ння и места вставки пользовательских функций работы с файлами). Результа-J работы приложения показаны на рис. 11.77 и 11.78.

hpragma once

(aniespace Му58Домашний телефонный справочник {

namespace System; osing namespace System: :ComponentModel; using namespace System::Collections; , using namespace System: : Windows:: Forms;

namespace System:: Data; [using namespace System:: Drawing;

[using namespace System:: 10; Добавлено для методов чтения/записи

строки

public ref class Forml : public System::Windows::Forms::Form I

public: Forml (void) {

InitializeComponent();

TODD: Add the constructor code here

protected: III <summary>

/ Clean up any resources being used. / </summary> ~Forml()

if (components) {

delete conponents;



private: System::Windows::Forms: protected:

private: System::Windows::Forms: private: System::Windows::Forms: private: System::Windows::Forms: private: System::Windows::Forms: private: System: :Windows: :Forms: private: System::Windows::Forms: private: System::Windows::Forms: private: System::Windows::Forms: private: System::Windows::Forms: private: System::Windows::Forms: private: / <summary>

/ Required designer variable.

ComboBox comboBoxl ;

Label- labeil; Label- label2; Label- label3;

CheckedListBox- checkedListBoxl;

TextBox- textBoxl ;

TextBox- textBox2;

Button- buttonl;

Button- button2;

Label- label4;

Button- buttons;

/ /=== Функции выгрузки в файл и загрузки из файла =========

void LoadFromFile (String -File, CheckedListBox -lb) {

Этот метод открывает текстовый файл, читает все его строки в строку String - и закрывает файл. Поскольку справочник небольшой, то этот метод можно применять. Это же касается и метода записи (см. ниже)

String -d, -b = File: :ReadAllText (File); (надо будет выделять no

разделителю / )

lb->Items->Clear();

Разборка длинной строки на настоящие строки while(b->Length > 0) {

int i=b->IndexOf( / ); поиск 1-го вхождения подстроки в строку if(i== -1)

break; d=b->Substring(О, i); lb->Items->Add(d);



1 ... 123 124 125 [ 126 ] 127 128 129 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика