Создание *.txt файлов в Microsoft Visual Studio 2012
Помогите пожалуйста.
Мне нужно сделать программу, записывающая в текстовый файл *.txt массив из 1000 случайных чисел. Задача то лёгкая, но вот Я никак не могу создать простой текстовый файл в Microsoft Visual Studio 2012.
В DevC++ код создания файла выглядит так:
Кликните здесь для просмотра всего текста
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include #include #include int main(void) { FILE * file=fopen("Результат.txt","w+"); srand(time(0)); for (int i=0; i100; i++) { for (int j=0; j100; j++) { fprintf(file, "[%d][%d]=%d",i+1, j+1, (1+rand()%100)); }; }; fclose(file); return 0; }
Но, когда Я просто его копирую в MVS2012, то компилятор Мне выдаёт следующие ошибки:
Кликните здесь для просмотра всего текста
1>—— Построение начато: проект: ConsoleApplication1, Конфигурация: Debug Win32 ——
1> ConsoleApplication1.cpp
1>c:\users\user\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(12 ): error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio\vc\include\stdio.h(218): см. объявление «fopen»
1>c:\users\user\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(13 ): warning C4244: аргумент: преобразование «time_t» в «unsigned int», возможна потеря данных
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Подскажите, в чём может быть проблема.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Menustrip.C++ Microsoft Visual Studio 2012
Здравствуйте! Пытаюсь работать в windows forms. Cуть программы такова : пользователь открывает.
Классы в Microsoft Visual Studio 2012 C++
программа работает, если не использовать классы, но как только начинаю вызывать методы класса и.
Ошибка в Microsoft Visual Studio 2012
После установки Microsoft Visual Studio 2012 при каждом запуске показывается окно (прикрепленный.
Microsoft Visual Studio Express 2012 Не ставиться
Не как не могу понять почему на рабочей Компьютер не ставиться Microsoft Visual Studio Express 2012.
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
MSVC не любит стандартные сишные функции, считает их небезопасными. Поставьте в самом начале cpp файла (до инклюдов) #define _CRT_SECURE_NO_WARNINGS, и студия успокоится.
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
Fyret, увы, не помогло.
Код в MVS2012:
Кликните здесь для просмотра всего текста
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #define _CRT_SECURE_NO_WARNINGS #include "stdafx.h" #include #include #include int _tmain(int argc, _TCHAR* argv[]) { FILE * file=fopen("Результат.txt","w+"); srand(time(0)); for (int i=0; i100; i++) { for (int j=0; j100; j++) { fprintf(file, "[%d][%d]=%d",i+1, j+1, (1+rand()%100)); }; }; fclose(file); return 0; }
Кликните здесь для просмотра всего текста
1>—— Построение начато: проект: ConsoleApplication1, Конфигурация: Debug Win32 ——
1> ConsoleApplication1.cpp
1>c:\users\user\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(4) : warning C4603: _CRT_SECURE_NO_WARNINGS: макрос не определен или определение изменилось после использования предкомпилированного заголовка
1> Добавление макроопределения в предкомпилированный заголовок вместо определения его здесь
1> c:\users\user\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(6) : использование предкомпилированного заголовка
1>c:\users\user\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(13 ): error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio\vc\include\stdio.h(218): см. объявление «fopen»
1>c:\users\user\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(14 ): warning C4244: аргумент: преобразование «time_t» в «unsigned int», возможна потеря данных
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Создание структуры файлов в visual studio code?
Прохожу курс HTML на Visual Studio Code. Не могу понять как в этой программе создать структуру файлов. Нет в меню этой функции. Подскажите решение. Обучение застопорилось!
1 ответов
С левой стороны же есть папки и файлы. Там можно тыкнуть на папку правой кнопкой мыши и в папке создать файл и т.д.
Sign up or Log in to write an answer
- Интерактивные уроки и курсы программирования и создания сайтов (дистанционное обучение) помогут вам в игровой форме изучить основы языков программирования веб-разработки и веб-программирования с нуля. Обучение онлайн 24/7.
Общие ссылки
- Отзывы
- Политика конфидециальности
- Условия использования
- Блог
- Цена и оплата
- Курсы и скринкасты
- Сертификаты
- Партнерская программа
- Комьюнити
Наши курсы и скринкасты
- HTML/CSS Advanced
- Bootstrap 4
- Vue JS
- Linux, GIT and web-hosting
- HTML and CSS
- Modern Javascript
- Javascript/jQuery
- Codeigniter
- Все курсы и скринкасты
Как создать файл на c visual studio
void main( void )
FILE *file;
char* file_name = «file.txt»;
char load_string[50] = «none»;
file = fopen( file_name, «w» );
fputs( «string», file );
file = fopen( file_name, «r» );
if( file != 0 )
fgets( load_string, 50 , file );
cout
Работа с файлами с помощью MFC( классы CFile, CStdioFile, . ) и стандартный класс MFC CFileDialog.
- Класс CFile
- Класс C MemFile
- Класс CStdioFile
- Примеры записи и чтения из файла
В библиотеку MFC включено несколько классов для обеспечения работы с файлами. Рассматриваемые ниже классы наследуются от базового класса CFile .
Класс CF ile
Класс CFile предназначен для обеспечения работы с файлами. Он позволяет упростить использование файлов, представляя файл как объект, который можно создать, читать, записывать и т.д.
Чтобы получить доступ к файлу, сначала надо создать объект класса CFile. Конструктор класса позволяет сразу после создания такого объекта открыть файл. Но можно открыть файл и позднее, воспользовавшись методом Open .
Открытие и создание файлов
После создания объекта класса CFile можно открыть файл, вызвав метод Open . Методу надо указать путь к открываемому файлу и режим его использования. Прототип метода Open имеет следующий вид:
virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError=NULL);
В качестве параметра lpszFileName надо указать имя открываемого файла. Можно указать только имя файла или полное имя файла, включающее полный путь к нему.
Второй параметр nOpenFlags определяет действие, выполняемое методом Open с файлом, а также атрибуты файла. Ниже представлены некоторые возможеые значения параметра nOpenFlags:
- CFile::modeCreate — Создается новый файл. Если указанный файл существует, то его содержимое стирается и длина файла устанавливается равной нулю.
- CFile::modeNoTruncate — Этот файл предназначен для использования совместно с файлом CFile::modeCreate. Если создается уже существующий файл, то его содержимое не будет удалено.
- CFile::modeRea d — Файл открывается только для чтения.
- CFile::modeReadWrite — Файл открывается для записи и для чтения.
- CFile::modeWrite — Файл открывается только для записи.
- CFile::typeText — Используется классами, порожденными от класса CFile, например CStdioFile, для работы с файлами в текстовом режиме. Текстовый режим обеспечивает преобразование комбинации символа возврата каретки и символа перевода строки.
- CFile::Binary — Используется классами, порожденными от класса CFile, например CStdioFile, для работы с файлами в двоичном режиме.
Необязательный параметр pError, который является указателем на объект класса CFileException , используется только в том случае, если выполнение операции с файлом вызовет ошибку. При этом в объект, указываемый pError, будет записана дополнительная информация.
Метод Open возвращает не нулевое значение, если файл открыт и нуль в случае ошибки. Ошибка при открытии файла может случиться, например, если методу Open указан для чтения несуществующий файл.
Идентификатор открытого файла
В состав класса CFile входит элемент данных m_hFile типа UINT. В нем хранится идентификатор открытого файла. Если объект класса CFile уже создан, но файл еще не открыт, то в переменной m_hFile записана константа hFileNull.
Обычно идентификатор открытого файла непосредственно не используется. Методы класса CFile позволяют выполнять практически любые операции с файлами и не требуют указывать идентификатор файла. Так как m_hFile является элементом класса, то реализация его методов всегда имеет свободный доступ к нему.
После завершения работы с файлом, его надо закрыть. Класс CFile имеет для этого специальный метод Close. Нужно заметить, что если был создан объект класса CFile и открыт файл, а затем объект удаляется, то связанный с ним файл закрывается автоматически с помощью деструктора.
Чтение и запись файлов
Для доступа к файлам предназначено несколько методов класса CFile : Read, ReadHuge, Write, WriteHuge, Flush . Методы Read и ReadHuge предназначены для чтения данных из предварительно открытого файла. В 32-разрядных операционных системах оба метода могут одновременно считать из файла больше 65535 байт. Спецификация ReadHuge считается устаревшей и оставлена только для совместимости с 16-разрядными операционными системами.
Данные, прочитанные из файла, записываются в буфер lpBuf. Параметр nCount определяет количество байт, которое надо считать из файла. Фактически из файла может быть считано меньше байт, чем запрошено параметром nCount. Это происходит, если во время чтения достигнут конец файла. Методы возвращают количество байт, прочитанных из файла.
Для записи в файл предназначены методы Write и WriteHuge. В 32-разрядных операционных системах оба метода могут одновременно записывать в файл больше 65535 байт. Методы записывает в открытый файл nCount байт из буфера lpBuf. В случае возникновения ошибки записи, например переполнения диска, методы вызывает обработку исключения.
Когда используется метод Write или WriteHuge для записи данных на диск, они некоторое время могут находиться во временном буфере. Чтобы убедиться, что необходимые изменения внесены в файл на диске, нужно воспользоваться методом Flush.
Операции с файлами
В состав класса входят методы, позволяющие выполнять над файлами различные операции, например копирование, переименование, удаление, изменение атрибутов.
Для изменения имени файла класс CFile включает статический метод Rename , выполняющий функции этой команды. Метод нельзя использовать для переименования каталогов. В случае возникновения ошибки метод вызывает исключение.
Для удаления файлов в классе CFile включен статический метод Remove , позволяющий удалить указанный файл. Этот метод не позволяет удалять каталоги. Если удалить файл невозможно, то метод вызывает исключение.
Чтобы определить дату и время создания файла, его длину и атрибуты, предназначен статический метод GetStatus . Существует две разновидности метода — первый определен как виртуальный, а второй — как статический метод.
Виртуальная версия метода GetStatus определяет состояние открытого файла, связанного с данным объектом класса CFile. Этот метод вызывается только тогда, когда объект класса CFile создан и файл открыт.
Статическая версия метода GetStatus позволяет определить характеристики файла, не связанного с объектом класса CFile. Чтобы воспользоваться этим методом, необязательно предварительно открывать файл.
В состав класса включены методы LockRange и UnlockRange , позволяющие заблокировать один или несколько фрагментов данных файла для доступа из других процессов. Если приложение пытается повторно блокировать данные, уже заблокированные раньше этим или другим приложением, вызывается исключение. Блокировка представляет собой один из механизмов, позволяющих нескольким приложениям или процессам одновременно работать с одним файлом, не мешая друг другу.
Установить блокировку можно с помощью метода LockRange . Чтобы снять установленные блокировки, надо воспользоваться методом UnlockRange . Если в одном файле установлены несколько блокировок, то каждая из них должна сниматься отдельным вызовом метода UnlockRange .
Чтобы переместить указатель текущей позиции файла в новое положение, можно воспользоваться одним из следующих методов класса CFile — Seek, SeekToBegin, SeekToEnd. В состав класса CFile также входят методы, позволяющие установить и изменить длину файла, — GetLength, SetLength .
При открытии файла указатель текущей позиции файла находится в самом начале файла. Когда порция данных прочитана или записана, то указатель текущей позиции перемещается в сторону конца файла и указывает на данные, которые будут читаться или записываться очередной операцией чтения или записи в файл.
Чтобы переместить указатель текущей позиции файла в любое место, можно воспользоваться универсальным методом Seek . Он позволяет переместить указатель на определенное число байт относительно начала, конца или текущей позиции указателя.
Чтобы переместить указатель в начало или конец файла, наиболее удобно использовать специальные методы. Метод SeekToBegin перемещает указатель в начало файла, а метод SeekToEnd — в его конец.
Но для определения длины открытого файла совсем необязательно перемещать его указатель. Можно воспользоваться методом GetLength . Этот метод также возвращает длину открытого файла в байтах. Метод SetLength позволяет изменить длину открытого файла. Если при помощи этого метода размер файла увеличивается, то значение последних байт не определено.
Текущую позицию указателя файла можно определить с помощью метода GetPosition . Возвращаемое методом GetPosition 32-разрядное значение определяет смещение указателя от начала файла.
Характеристики открытого файла
Чтобы определить расположение открытого файла на диске, надо вызвать метод GetFilePath . Этот метод возвращает объект класса CString , в котором содержится полный путь файла, включая имя диска, каталоги, имя файла и его расширение.
Если требуется определить только имя и расширение открытого файла, можно воспользоваться методом GetFileName . Он возвращает объект класса CString, в котором находится имя файла. В случае, когда нужно узнать только имя открытого файла без расширения, пользуются методом GetFileTitle .
Следующий метод класса CFile позволяет установить путь файла. Это метод не создает, не копирует и не изменяет имени файла, он только заполняет соответствующий элемент данных в объекте класса CFile.
Класс C MemFile
В библиотеку MFC входит класс CMemFile , наследуемый от базового класса CFile . Класс CMemFile представляет файл, размещенный, в оперативной памяти. С объектами класса CMemFile так же, как и с объектами класса CFile . Отличие заключается в том, что файл, связанный с объектом CMemFile , расположен не на диске, а в оперативной памяти компьютера. За счет этого операции с таким файлом происходят значительно быстрее, чем с обычными файлами.
Работая с объектами класса CMemFile , можно использовать практически все методы класса CFile , которые были описаны выше. Можно записывать данные в такой файл или считывать их. Кроме этих методов в состав класса CMemFile включены дополнительные методы.
Для создания объектов класса CMemFile предназначено два различных конструктора. Первый конструктор CMemFile имеет всего один необязательный параметр nGrowBytes:
CMemFile(UINT nGrowBytes=1024);
Этот конструктор создает в оперативной памяти пустой файл. После создания файл автоматически открывается (не нужно вызывать метод Ope n).
Когда начинается запись в такой файл, автоматически выделяется блок памяти. Для получения памяти методы класса CMemFile вызывают стандартные функции malloc, realloc и free . Если выделенного блока памяти недостаточно, его размер увеличивается. Увеличение блока памяти файла происходит по частям по nGrowBytes байт. После удаления объекта класса CMemFile используемая память автоматически возвращается системе.
Второй конструктор класса CMemFile имеет более сложный прототип. Это конструктор используется в тех случаях, когда программист сам выделяет память для файла:
CMemFile(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes=0);
Параметр lpBuffer указывает на буфер, который будет использоваться для файла. Размер буфера определяется параметром nBufferSize.
Необязательный параметр nGrowBytes используется более комплексно, чем в первом конструкторе класса. Если nGrowBytes содержит нуль, то созданный файл будет содержать данные из буфера lpBuffer. Длина такого файла будет равна nBufferSize.
Если nGrowBytes больше нуля, то содержимое буфера lpBuffer игнорируется. Кроме того, если в такой файл записывается больше данных, чем помещается в отведенном буфере, то его размер автоматически увеличивается. Увеличение блока памяти файла происходит по частям по nGrowBytes байт.
Класс CMemFile позволяет получить указатель на область памяти, используемую файлом. Через этот указатель можно непосредственно работать с содержимым файла, не ограничивая себя методами класса CFile . Для получения указателя на буфер файла можно воспользоваться методом Detach. Перед этим полезно определить длину файла (и соответственно размер буфера памяти), вызвав метод GetLength .
Метод Detach закрывает данный файл и возвращает указатель на используемый им блок памяти. Если опять потребуется открыть файл и связать с ним оперативный блок памяти, нужно вызвать метод Attach .
Нужно отметить, что для управления буфером файла класс CMemFile вызывает стандартные функции malloc, realloc и free . Поэтому, чтобы не нарушать механизм управления памятью, буфер lpBuffer должен быть создан функциями malloc или calloc .
Класс CStdioFile
Тем, кто привык пользоваться функциями потокового ввода/вывода из стандартной библиотеки C и C++, следует обратить внимание на класс CStdioFile , наследованный от базового класса CFile . Этот класс позволяет выполнять буферизированный ввод/вывод в текстовом и двоичном режиме. Для объектов класса CStdioFile можно вызывать практически все методы класса CFile.
В класс CStdioFile входит элемент данных m_pStream, который содержит указатель на открытый файл. Если объект класса CStdioFile создан, но файл еще не открыт, либо закрыт, то m_pStream содержит константу NULL.
Класс CStdioFile имеет три различных конструктора. Первый конструктор класса CStdioFile не имеет параметров. Этот конструктор только создает объект класса, но не открывает никаких файлов. Чтобы открыть файл, надо вызвать метод Open базового класса CFile .
Второй конструктор класса CStdioFile можно вызвать, если файл уже открыт и нужно создать новый объект класса CStdioFile и связать с ним открытый файл. Этот конструктор можно использовать, если файл был открыт стандартной функцией fopen . Параметр метода должен содержать указатель на файл, полученный вызовом стандартной функции fopen .
Третий конструктор можно использовать, если надо создать объект класса CStdioFile , открыть новый файл и связать его с только что созданным объектом.
Для чтения и записи в текстовый файл класс CStdioFile включает два новых метода: ReadString и WriteString . Первый метод позволяет прочитать из файла строку символов, а второй метод — записать.
Примеры записи и чтения из файла
Приведем фрагменты кода, в которых демонстрируется использование стандартных диалоговых панелей выбора файла и процедуры чтения и записи в файл.
Открытие файла и чтение из него
CString m_Text; …… // создание стандартной панели выбора файла Open CFileDialog DlgOpen(TRUE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY,(LPCSTR)" Text Files (*.txt) |*.txt||"); // отображение стандартной панели выбора файла Open if(DlgOpen.DoModal()==IDOK) < // создание объекта и открытие файла для чтения CStdioFile File(DlgOpen.GetPathName(),CFile::modeRead|CFile::typeBinary); // чтение из файла строки CString& ref=m_Text; File.ReadString(ref); // передается ссылка на строку m_Text >
-
Здесь находится рабочий код программы, выполненной для простоты в виде консольного приложения под MFC. Чтобы программа работала не забудте сделать следующее:
Запустите программу — Build / Rebuild all ( будут ошибки ), выберите Build / Set active configuration — Win 32 Realise, выберите пункт меню «Project», далее «Settings. «, закладку «C/C++», Category — Code Generation и в пункте «Use run-time library» выберите «Multithreaded». После этого сделайте опять Build / Rebuild all и программа будет работать.
Открытие файла и запись из него
CString m_Text; …… // создание стандартной панели выбора файла SaveAs CFileDialog DlgSaveAs(FALSE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, (LPCSTR)" Text Files (*.txt) |*.txt||"); // отображение стандартной панели выбора файла SaveAs if(DlgSaveAs.DoModal()==IDOK) < // создание объекта и открытие файла для записи CStdioFile File(DlgSaveAs.GetPathName(), CFile::modeCreate|CFile::modeWrite|CFile::typeBinary); // запись в файл строки File.WriteString((LPCTSTR)m_Text); >
-
Здесь находится рабочий код программы, выполненной для простоты в виде консольного приложения под MFC. Чтобы программа работала не забудте сделать следующее:
Запустите программу — Build / Rebuild all ( будут ошибки ), выберите Build / Set active configuration — Win 32 Realise, выберите пункт меню «Project», далее «Settings. «, закладку «C/C++», Category — Code Generation и в пункте «Use run-time library» выберите «Multithreaded». После этого сделайте опять Build / Rebuild all и программа будет работать.
Создание файла помощи — файла справки — в формате CHM для .NET Windows-приложения — с примерами
В этой статье рассматривается вопрос создания файла справки в формате CHM с помощью программы Dr.Explain, а также его интеграция в .NET-приложение.
Из статьи вы узнаете:
- как создать и настроить проект в Dr.Explain;
- как создать удобную структуру файла справки;
- как создать аннотированное изображение формы интерфейса .NET-приложения;
- как настроить значения Help ID;
- как сохранить проект;
- как экспортировать проект в СHM файл;
- как интегрировать файл справки в .NET-приложение.
Установка Dr.Explain
Вы можете скачать установочный файл программы Dr.Explain на официальном сайте по адресу https://www.drexplain.ru/download/. Для этого воспользуйтесь кнопкой «Скачать бесплатно». После того как файл будет загружен, запустите его. Для установки программы пройдите стандартную процедуру, следуя указаниям мастера установки (Рисунок 1). При использовании пробной версии Dr.Explain доступны все функции, но все изображения в экспортированных файлах помечаются водяными знаками и есть ограничение на размер создаваемого проекта.

Рисунок 1. Мастер установки «Dr.Explain»
Создание и настройка нового проекта
При запуске программы в окне «Проекты Dr.Explain» (Рисунок 2) выберите пункт «Создать новый проект» и нажмите «ОК», либо используйте пункт «Файл -> Создать» главного меню.

Рисунок 2. Окно Dr.Explain «Список проектов»
Для настройки параметров экспорта в формат CHM, выберите пункт «Настройки -> Настройки проекта» в главном меню программы. Выберите раздел «CHM экспорт» в окне настроек.
Наполнение дерева разделов в файле справки
Чтобы получить удобную исчерпывающую структуру файла справки создайте отдельные темы для описания всех форм и объектов .NET-приложения.
Создайте новую тему с помощью пункта «Настройки -> Добавить тему» главного меню. Также можно использовать пункт «Добавить -> Добавить тему» контекстного меню, которое вызывается нажатием правой кнопки мыши на любой позиции дерева проекта (Рисунок 3).

Рисунок 3. Управление деревом проекта «Dr.Explain»
Настройте порядок и иерархию разделов, используя команды контекстного меню «Выше» и «Ниже» . Изменить названия темы можно с помощью пункта «Переименовать», либо просто нажав клавишу F2.
Далее создайте содержимое разделов, выберите интересующий пункт в дереве проекта и приступайте к заполнению в окне редактора. Заполняйте раздел в свободной форме. В редакторе предусмотрены основные стандартные функции редактирования и форматирования текста и ряд функция для работы с изображениями, видео, таблицами и переменными. Использование переменных позволяет заменить повторяющиеся данные именем переменной. В таком случае при изменении присвоенного переменной значения, соответствующий текст изменится во всем документе.
Для ускорения поиска по итоговому файлу справки вы можете задать список ключевы слова, который будет выполнять роль алфавитного указателя. Переключитесь на закладку «Ключевые слова» (Рисунок 4). Добавляйте и удаляйте слова, используя соответствующие кнопки. Настройте связь разделов и слов — выберите интересующий раздел в дереве проекта и проставьте галочки в полях тех слов, которые хотите ассоциировать с данным разделом.

Рисунок 4. Работа с ключевыми словами
Для создания описания интерфейса вашего .NET-приложения и его отдельных элементов воспользуйтесь функцией захвата скриншота — кнопка — «Схватить экран».

Рисунок 5. Диалог «Захват объекта»
После открытия окна «Захват объекта» (Рисунок 5) установите метки в поле «Accessible -объект» или «Win 32-окно», затем выполните захват скриншота интересующей формы одним из способов, предложенных в окне захвата. В дерево разделов будет автоматически добавлен раздел, содержащий аннотированное изображение формы (Рисунок 6). В окне Дизайнера можно добавить и удалить аннотацию или изменить порядок следования описания отдельных элементов.

Рисунок 6. Результат выполнения захвата объекта
Настройка значений Help ID для создания контекстной помощи
Для того, чтобы впоследствии можно было выполнить привязку разделов файла справки к конкретным элементам интерфейса .NET-приложения, необходимо определить значения Help ID-идентификаторов для всех разделов. Выберите в структуре проекта нужный раздел и перейдите в поле «Help ID» свойствах раздела (Рисунок 7). При необходимости измените значение, для сохранения изменений просто уберите фокус с этого поля.

Рисунок 7. Изменение значения Help ID в «Свойствах раздела»
Для проверки уникальности идентификаторов разделов используйте команду «Инструменты –> Проверка проекта на ошибки» главного меню. Если в документе будут обнаружены дублирующиеся значения Help ID, в открывшемся окне появится сообщение с указанием таких повторяющихся значений идентификаторов. Измените значения, чтобы избавиться от дублирования. Это обеспечит правильную работу контекстной помощи при вызове разделов справки из приложения.
Предварительный просмотр страниц и сохранение проекта
Перед экспортом проекта используйте функцию предварительного просмотра — кнопка «Просмотр CHM», чтобы убедиться в корректном отображении всех разделов справки. Если необходимо внести изменения, вернитесь в режим редактирования.
Для сохранения проекта выберите пункт «Файл -> Сохранить как» главного меню, введите имя файла и укажите путь его размещения в открывшемся окне сохранения.
Экспорт проекта в CHM-файл
После окончания работы над проектом экспортируйте его в СHM файл. Для этого используйте пункт «Настройки -> Экспорт в CHM» главного меню. Установите метку «Запустить проверку проекта перед экспортом» дляанализа корректности проекта до начала экспорта. Для открытия файла по окончании экспорта, установите флаг «Открыть CHM файл». Чтобы перезаписать ранее сохраненный файл без запроса подтверждения отметьте поле «Перезаписать молча». Нажмите кнопку «Начать экспорт», после чегов окне «Экспорт в CHM» (Рисунок 8) будет отображаться отчет о ходе процесса. Закройте окно после окончания экспорта.

Рисунок 8. Окно «Экспорт в CHM»
Интеграция CHM-файла в .NET-приложение
Создайте в форме .NET-приложения элемент вызова файла справки, например, кнопку. Для этого выполните следующие действия:
- откройте проект с помощью средств среды разработки, которую вы используете;
- в редакторе форм (Рисунок 9) выберите «Button» из панели элементов;
- поместите элемент в форму;
- в свойствах элемента задайте название и подпись кнопки, например, например, «HlpButton» и «Help». Параметры вводятся в поля «Name» и «Text» соответственно;

Рисунок 9. Редактор форм среды разработки Microsoft Visual Studio
- в редакторе кода (Рисунок 10) в строке «private void HlpButton _Click(object sender, EventArgs e)» отображается имя элемента вызова файла справки (в данном случае «Help Button»). Введите ниже строку – «Help.ShowHelp(this, «Help.chm»);», где Help.chm — имя файла справки в формате CHM. Код элемента управления в целом должен иметь вид:
private void HlpButton_Click(object sender, EventArgs e)

Рисунок 10. Редактор кода среды разработки Microsoft Visual Studio
- убедитесь в правильной работе кнопки вызова файла справки. Запустите отладку — пункт «Debug -> Start debugging» главного меню, после чего произойдет запуск приложения. Нажмите кнопку «Help» созданный ранее файл справки в формате CHM должен открыться в отдельном окне;
- повторите описанную процедуру для всех форм, в которых необходимо вставить элемент вызова справки.
ОБРАТИТЕ ВНИМАНИЕ: Для правильной работы кнопки вызова справки располагайте CHM файл и исполняемый файл .NET-приложения в одной папке. Если необходимо иное размещение файлов, используйте для кнопки вызова справки следующий код:
string commandText = @"D:\work\techwrite\help.chm”; var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = commandText; proc.StartInfo.UseShellExecute = true; proc.Start();
где @»D:\work\techwrite\help.chm” — полный путь до файла справки в формате CHM. Код элемента в целом будет иметь вид:
private void HlpButton_Click(object sender, EventArgs e) < string commandText = @"D:\work\techwrite\help.chm”;
var proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = commandText; proc.StartInfo.UseShellExecute = true; proc.Start (); >
При таком способе вызова файла справки при любых его перемещениях необходимо заново указывать в коде полный путь.
Будьте внимательны, для обеспечения правильной работы элемента вызова файла справки строго соблюдайте синтаксис, приведенный в примерах.
Привязка тем файла CHM к объектам .NET-приложения
Альтернативный вариант вывода справки, заключается в вызове определенных разделов справки, которые соответствуют отдельным элементам .NET- приложения. Такой способ можно использовать самостоятельно, либо совместно с описанным выше методом. При нажатии клавиши «F1» выводится тот раздел фала справки, который соответствует элементу приложения, находящемуся в фокусе в момент нажатия. Для реализации такого метода выполните следующие действия:
- добавьте компонент «Help Provider» путем егоперемещения в форму приложения из панели элементов. Значок компонента появится в нижней части окна редактора форм;
ОБРАТИТЕ ВНИМАНИЕ: Допускается использование нескольких компонентов «Help Provider». Это удобно в том случае, когда информация о различных элементах содержится в различных файлах справки. Также вы можете использовать отдельные компоненты для различных форм;
- в окне свойств элемента «Help Provider» укажите расположение файла справки — поле «HelpNamespace»
ОБРАТИТЕ ВНИМАНИЕ: Если файл справки располагается в одной папке с исполнительным файлом приложения, то достаточно указать только имя файла. При раздельного размещении файлов необходимо указать полный путь. В таком случае при любом перемещении файла справки, значение параметра «HelpNamespace» должно быть заменено актуальным.
- в окне свойств объекта внесите значение Help ID соответствующего объекту раздела справки в поле «HelpKeyword on Help Provider1». Выберите значение «TopicId» для поля «Help Navigator on Help Provider1»
ОБРАТИТЕ ВНИМАНИЕ: Количество параметров «HelpKeyword …» и «Help Provider…» в свойствах объектов соответствует количеству используемых компонентов «Help Provider», а цифра в наименовании параметра соответствует номеру компонента. Будьте внимательны при заполнении данных полей;
- убедитесь в правильной работе компонента «Help Provider». Запустите отладку — пункт «Debug -> Start debugging» главного меню, после чего на экране появится стартовая форма приложения. При нажатии клавиши «F1» должен открыться тот раздел файла справки, который соответствует элементу, находящемуся в фокусе;
- повторите описанную процедуру для всех объектов, которые необходимо ассоциировать с определенными разделами файла справки.
Открытие конкретных разделов файла справки с помощью компонента Help Provider
Кроме открытия конкретных разделов файла справки по соответствующим им значениям HelpID, вы можете использовать «HelpProvider» для адресации разделов с помощью специальных параметров. Для настройки вызова определенных разделов необходимо установить соответствующие значения полей «HelpKeyword on Help Provider1» и «Help Navigator on Help Provider1» в свойствах элементов. Чтобы открыть определенный раздел файла справки по нажатию клавиши «F1» выполните шаги ниже:
- перетащите «Help Provider», его из панели компонетов на форму. Компонент будет отображаться в нижней части редактора форм;
- укажите путь к файлу справки в поле «HelpNamespace» в свойствах объекта «Help Provider»;
- в свойствах элемента, в поле «HelpNavigator on Help Provider1» выберите нужный параметр:
·AssociateIndex— откроет вкладку «Указатель» и подсветит в списке первое по порядку ключевое слово, которое начинается с сочетания символов в поле «HelpKeyword on Help Provider1»;
·Index — откроет вкладку CHM-файла «Указатель» и подсвечивает в списке ключевое слово, указанное в поле «HelpKeyword on Help Provider1»;
·Find — откроет вкладку CHM-файла «Поиск»;
·TableOfContents — откроет оглавление CHM-файла;
·Topic — откроет раздел, название которого указано в поле «HelpKeyword on Help Provider1».
Важно: Название раздела указывается в формате «Topic.htm», это необходимо для правильной работы вызова файла справки.
·TopicId — откроет раздел CHM-файла, которому соответствует значение параметра Help ID, определенное в поле «HelpKeyword on Help Provider1»;
·KeywordIndex — откроет вкладку CHM-файла «Указатель» и отобразит список разделов, содержащих ключевое слово, указанное в поле «HelpKeyword on Help Provider1».
Используйте эти механизмы вызова файла справки, чтобы гибко настроить адресацию и поиск в справочной системе, а отображать для каждой отдельной формы или элемента соответствующий им файл справки или отдельные его разделы в нем.
Ниже приведены фрагменты кода, чтобы вызвать определенный раздел справочной системы по нажатию кнопки:
Код вызова стартовой страницы справки:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < Help.ShowHelp(this, helpfile); >> >
где help.chm — имя файла справки (файл справки должен быть размещен в одной папке с исполнительным файлом приложения).
Код вызова вкладки «Указатель»:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < Help.ShowHelpIndex(this, helpfile); >> >
Код вызова оглавления:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < HelpNavigator navigator = HelpNavigator.TableOfContents; Help.ShowHelp(this, helpfile, navigator); >> >
Код вызова вкладки «Поиск»:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; private const string findtext = ""; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < HelpNavigator navigator = HelpNavigator.Find; Help.ShowHelp(this, helpfile, navigator, findtext); >> >
Код вызова поиска по первым буквам ключевого слова:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; private const string AsInd = "me"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < HelpNavigator navigator = HelpNavigator.AssociateIndex; Help.ShowHelp(this, helpfile, navigator, AsInd); >> >
где me — сочетание букв для поиска
Код вызова поиска по ключевому слову:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; private const string Index = "FAQ"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < HelpNavigator navigator = HelpNavigator.Index; Help.ShowHelp(this, helpfile, navigator, Index); >> >
где FAQ — ключевое слово
Код вызова раздела по его названию:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; private const string Topic = "Overview.htm"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < HelpNavigator navigator = HelpNavigator.Topic; Help.ShowHelp(this, helpfile, navigator, Topic); >> >
где Overview.htm — название раздела (ключевое слово всегда указывается в формате Topic.htm)
Код вызова раздела по его HelpID:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; private const string TopicId = "1500"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < HelpNavigator navigator = HelpNavigator.TopicId; Help.ShowHelp(this, helpfile, navigator, TopicId); >> >
где 1500 — значение HelpID интересующего раздела
Код вызова списка разделов, содержащих ключевое слово:
namespace WindowsFormsApplication1 < public partial class Form1 : Form < private const string helpfile = "help.chm"; private const string KeywInd = "menu"; public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >private void HlpButton_Click(object sender, EventArgs e) < HelpNavigator navigator = HelpNavigator.KeywordIndex; Help.ShowHelp(this, helpfile, navigator, KeywInd); >> >
где menu — ключевое слово для поиска разделов.
Смотрите также
- Разработка пользовательской документации для включения программного продукта в Реестр отечественных программ Минцифра России
- Создание help-файла (справки) в формате CHM для Visual Basic (VB.NET)-приложения для Windows при помощи Dr.Explain
- 10 эвристик для оценки удобства использования (юзабилити) вашей документации
