Опубликован: 11.09.2006 | Уровень: специалист | Доступ: платный
Лекция 8:

Справочные материалы. перевод приложений. специальные возможности

Аннотация: Создание справки в формате chm. Программа HTML Help Workshop. Подготовка страниц, создание содержания, указателя, поиска, "Избранного". Интерактивная справка, элемент управления Help Provider. Всплывающие подсказки, элемент управления ToolTip. Перевод приложений. Форматированный вывод строк. Специальные возможности

Для работы с данной лекцией используйте примеры.

Создание справки

Справка — непременный атрибут любой, даже самой небольшой программы. Хорошо написанная справка дает пользователям возможность быстро освоить основы работы с программой, практически не прибегая к помощи дополнительных учебников. Ее содержание может быть совсем маленьким — таким как справка к блокноту Windows, или огромным — таким как MSDN (библиотека, представляющая собой, по сути, гигантскую справочную систему).

Файл справки представляет собой совокупность HTML-страниц, скомпилированных в одно приложение формата *.chm или *.hlp. Иерархическая структура образуется системой гиперссылок между страницами и их древовидным расположением. В папке C:\WINDOWS\Help находятся справочные файлы большинства приложений операционной системы Windows.

В качестве приложения, к которому мы будем составлять справку, возьмем Notepad C#, разработанный нами во "Работа с элементами управления" . Поскольку программа включает в себя простейшие и всем известные операции с текстом, мы не будем их описывать, а в качестве материала воспользуемся их кодом (рис. 8.1).

Готовая справка приложения Notepad C#

увеличить изображение
Рис. 8.1. Готовая справка приложения Notepad C#

Подготовка HTML-страниц

Исходные страницы справки лучше всего создавать в одном из пакетов верстки web-страниц, например, Microsoft Front Page. Справка будет состоять из 36 страниц, связанных между собой. В качестве фонового цвета на всех страницах я выбрал светло-голубой (Тег <body bgcolor="#66CCFF">). Для копирования кода я свернул все методы и обработчики в проекте в блоки, а при вставке в документ они автоматически разворачивались (рис. 8.2):

Копирование блоков кода

Рис. 8.2. Копирование блоков кода

Таблица 8.1 содержит данные о страницах справки. Желательно самим создать HTML-страницы со всеми ссылками, указанными в этой таблице.

Таблица 8.1. Исходные HTML — страницы справки
Название файла Заголовок страницы Содержание страницы
AboutForm.htm Свойства формы About

Свойства формы About:

Форма About, свойство Значение
Name About
FormBorderStyle FixedSingle
MaximizeBox False
MinimizeBox False
Size 318; 214
Text About Notepad C#

Внешний вид формы в режиме дизайна:

Главное окно программы

Главное окно программы

Полный листинг формы About. (ссылка на FullCodeAbout.htm)

AboutProgram.htm Обработчик пункта меню About Program

Обработчик пункта меню About Program..., форма frmmain (ссылка на frmmain.htm):

private void mnuAbout_Click(object sender, 
           System.EventArgs e)
{
//Создаем новый экземпляр формы About
About frm = new About();
frm.Show();
}

При выборе этого пункта меню появляется форма About (ссылка на AboutForm).

ArrangeIcons.htm Обработчик пункта меню Arrange Icons

Обработчик пункта меню Arrange Icons, форма frmmain (ссылка на frmmain.htm):

private void mnuArrangeIcons_Click(object sender, 
           System.EventArgs e)
{
this.LayoutMdi(MdiLayout.ArrangeIcons);
}
blank.htm Свойства формы blank

Свойства формы blank:

Форма blank, свойство Значение
Name blank
Text blank
WindowState Maximized

Внешний вид формы в режиме дизайна:

Главное окно программы

При выборе этого пункта меню появляется форма About (ссылка на AboutForm).

blank.htm Свойства формы blank

Свойства формы blank:

Форма blank, свойство Значение
Name blank
Text blank
WindowState Maximized

Внешний вид формы в режиме дизайна:

Внешний вид формы в режиме дизайна

Полный листинг формы blank. (ссылка на FullCodeblank.htm)

blankCopy.htm Метод Copy формы blank

Метод Copy формы blank (ссылка на blank.htm):

public void Copy()
{
this.BufferText = richTextBox1.SelectedText;
}
blankCut.htm Метод Cut формы blank

Метод Cut формы blank (ссылка на blank.htm):

public void Cut()
{
this.BufferText = richTextBox1.SelectedText;
richTextBox1.SelectedText = "";
}
blankDelete.htm Метод Delete формы blank

Метод Delete формы blank (ссылка на blank.htm):

public void Delete()
{
richTextBox1.SelectedText = ""; 
this.BufferText = "";
}
blankOpen.htm Метод Open формы blank

Метод Open формы blank (ссылка на blank.htm):

public void Open(string OpenFileName)
{
///Вставьте сюда код из проекта
}
blankPaste.htm Метод Paste формы blank

Метод Paste формы blank (ссылка на blank.htm):

public void Paste()
{
richTextBox1.SelectedText = this.BufferText;
}
blankSave.htm Метод Save формы blank

Метод Save формы blank (ссылка на blank.htm):

public void Save(string SaveFileName)
{
///Вставьте сюда код из проекта
}
blankSelectAll.htm Метод Select All формы blank

Метод Select All формы blank (ссылка на blank.htm):

public void SelectAll()
{
richTextBox1.SelectAll(); 
}
Cascade.htm Обработчик пункта меню Cascade

Обработчик пункта меню Cascade, форма frmmain (ссылка на frmmain.htm):

private void mnuCascade_Click(object sender, 
           System.EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}
Color.htm Обработчик пункта меню Color

Обработчик пункта меню Color, форма frmmain (ссылка на frmmain.htm):

private void mnuColor_Click(object sender, 
           System.EventArgs e)
{
///Вставьте сюда код из проекта
}
Copy.htm Обработчик пункта меню Copy

Обработчик пункта меню Copy, форма frmmain (ссылка на frmmain.htm):

private void mnuCopy_Click(object sender, 
           System.EventArgs e)
{
blank frm = (blank)this.ActiveMdiChild;
frm.Copy();
}

В коде вызывается метод Copy (ссылка на blankCopy.htm) формы blank (ссылка на blank.htm)

Cut.htm Обработчик пункта меню Cut

Обработчик пункта меню Cut, форма frmmain (ссылка на frmmain.htm):

private void mnuCut_Click(object sender, 
           System.EventArgs e)
{
blank frm = (blank)this.ActiveMdiChild;
frm.Cut();
}

В коде вызывается метод Cut (ссылка на blankCut.htm.htm) формы blank (ссылка на blank.htm)

Delete.htm Обработчик пункта меню Delete

Обработчик пункта меню Delete, форма frmmain (ссылка на frmmain.htm):

private void mnuDelete_Click(object sender, 
           System.EventArgs e)
{
blank frm = (blank)this.ActiveMdiChild;
frm.Delete();
}

В коде вызывается метод Delete (ссылка на blankDelete.htm) формы blank (ссылка на blank.htm)

Exit.htm Обработчик пункта меню Exit

Обработчик пункта меню Exit, форма frmmain (ссылка на frmmain.htm):

private void mnuExit_Click(object sender, 
           System.EventArgs e)
{
this.Close();
}
Find.htm Обработчик пункта меню Find

Обработчик пункта меню Find, форма frmmain (ссылка на frmmain.htm):

private void mnuFind_Click(object sender, 
           System.EventArgs e)
{
///Вставьте сюда код из проекта
}

При выборе этого пункта меню появляется форма FindForm (ссылка на FindForm.htm).

FindForm.htm Свойства формы FindForm

Свойства формы FindForm:

Форма FindForm, свойство Значение
Name FindForm
FormBorderStyle FixedToolWindow
Size 328; 112
Text Find

Внешний вид формы в режиме дизайна:

Внешний вид формы в режиме дизайна

Полный листинг формы FindForm. (Ссылка на FullCodeFindForm.htm)

Font.htm Обработчик пункта меню Font

Обработчик пункта меню Font, форма frmmain (ссылка на frmmain.htm):

private void mnuFont_Click(object sender, 
           System.EventArgs e)
{
///Вставьте сюда код из проекта
}
frmmain.htm Свойства формы frmmain

Свойства формы frmmain:

Form1, форма, свойство Значение
Name frmmain
Icon ICOCode\Glava2\NotepadCSharp\Icon\README.ICO
IsMdiContainer True
Menu mainMenu1
Text Notepad C#
WindowState Maximized
Внешний вид формы в режиме дизайна:

Полный листинг формы frmmain. (Ссылка на FullCodefrmmain.htm)

FullCodeAbout.htm Полный листинг формы About

Полный листинг формы About:

///Вставьте сюда код из проекта

FullCodeblank.htm Полный листинг формы blank

Полный листинг формы blank:

///Вставьте сюда код из проекта

FullCodeFindForm.htm Полный листинг формы FindForm

Полный листинг формы FindForm:

///Вставьте сюда код из проекта

FullCodefrmmain.htm Полный листинг формы frmmain

Полный листинг формы frmmain:

///Вставьте сюда код из проекта

index.htm Введение

Программа Notepad C# была сделана в ходе изучения элементов программирования на языке C# для Windows. По своей функциональности она напоминает что-то среднее между блокнотом и текстовым редактором WordPad. Некоторые фрагменты кода были приведены в чистом виде, без блоков обработки исключений. В результате при выборе неподходящих действий — например, операций работы с текстом при отсутствии бланка, — возможны ошибки. Поскольку исходный код программы прилагается, Вы можете добавить соответствующие блоки. Также, используя свойство Enabled и Visible элементов, можно получить недоступность или невидимость элементов, работа с которыми в определенные моменты вызывает исключения

New.htm Обработчик пункта меню New

Обработчик пункта меню New, форма frmmain (ссылка на frmmain.htm):

private void mnuNew_Click(object sender, 
           System.EventArgs e)
{
///Вставьте сюда код из проекта 
}
Notepadhelp.htm Обработчик пункта меню Notepad C# Help

Обработчик пункта меню Notepad C# Help, форма frmmain (ссылка на frmmain.htm):

private void mnunotepadhelp_Click(object sender, 
           System.EventArgs e)
{
try
{
Process SysInfo = new Process();
SysInfo.StartInfo.ErrorDialog = true;
SysInfo.StartInfo.FileName = "notepadhelp.chm";
SysInfo.Start();
}
catch (Exception ex)
{
MessageBox.Show (ex.Message);
}
}
Open.htm Обработчик пункта меню Open

Обработчик пункта меню Open, форма frmmain (ссылка на frmmain.htm):

private void mnuOpen_Click(object sender, 
           System.EventArgs e)
{
///Вставьте сюда код из проекта 
}

В коде вызывается метод Open (ссылка на blankOpen.htm) формы blank (ссылка на blank.htm)

Paste.htm Обработчик пункта меню Paste

Обработчик пункта меню Paste, форма frmmain (ссылка на frmmain.htm):

private void mnuPaste_Click(object sender, 
           System.EventArgs e)
{
blank frm = (blank)this.ActiveMdiChild;
frm.Paste();
}

В коде вызывается метод Paste (ссылка на blankPaste.htm) формы blank (ссылка на blank.htm)

Save.htm Обработчик пункта меню Save

Обработчик пункта меню Save, форма frmmain (ссылка на frmmain.htm):

private void mnuSave_Click(object sender, 
           System.EventArgs e)
{
//Переключаем фокус на данную форму.
blank frm = (blank)this.ActiveMdiChild;
//Вызываем метод Save формы blank
frm.Save(frm.DocName);
frm.IsSaved = true;
}

В коде вызывается метод Save (ссылка на blankSave.htm) формы blank (ссылка на blank.htm)

SaveAs.htm Обработчик пункта меню Save As

Обработчик пункта меню Save As, форма frmmain (ссылка на frmmain.htm):

private void mnuSaveAs_Click(object sender, 
           System.EventArgs e)
{
///Вставьте сюда код из проекта 
}
SelectAll.htm Обработчик пункта меню Select All

Обработчик пункта меню Select All, форма frmmain (ссылка на frmmain.htm):

private void mnuSelectAll_Click(object sender, 
           System.EventArgs e)
{
blank frm = (blank)this.ActiveMdiChild;
frm.SelectAll();
}

В коде вызывается метод Select All (ссылка на blankSelectAll.htm) формы blank (ссылка на blank.htm)

structure.htm Структура программы

Все возможности программы собраны в нескольких пунктах главного меню:

Меню

В пункте File собраны основные операции открытия и сохранения документа ( New (ссылка на New.htm), Open (ссылка на Open.htm), Save (ссылка на Save.htm), Save As (ссылка на SaveAs.htm), Exit (ссылка на Exit.htm)):

File

В пункте Edit расположены операции работы с текстом (Cut (ссылка на Cut.htm), Copy (ссылка на Copy.htm), Paste (ссылка на Paste.htm), Delete (ссылка на Delete.htm), Select All (ссылка на SelectAll.htm), Find (ссылка на Find.htm)):

Edit

Пункт Format позволяет задать свойства шрифта, такие как цвет, размер, стиль (Font (ссылка на Font.htm), Color (ссылка на Color.htm)) :

Format

Для упорядочивание нескольких открытых документов используется пункт меню Window (Arrange Icons (ссылка на ArrangeIcons.htm), Cascade (ссылка на Cascade.htm), Tile Horizontal (ссылка на TileHorizontal.htm), Tile Vertical (ссылка на TileVertical.htm)):

Window

В последнем пункте "?" содержатся пункты вызова этой справки и окно с информацией о программе (Notepad C# Help (ссылка на Notepadhelp.htm), About Program... (ссылка на AboutProgram.htm)):

?
TileHorizontal.htm Обработчик пункта меню Tile Horizontal

Обработчик пункта меню Tile Horizontal, форма frmmain (ссылка на frmmain.htm):

private void mnuTileHorizontal_Click(object sender, 
           System.EventArgs e)
{
this.LayoutMdi(MdiLayout.TileHorizontal);
}
TileVertical.htm Обработчик пункта меню Tile Vertical

Обработчик пункта меню Tile Vertical, форма frmmain (ссылка на frmmain.htm):

private void mnuTileVertical_Click(object sender, 
           System.EventArgs e)
{
this.LayoutMdi(MdiLayout.TileVertical);
}

Итак, в результате у нас получились 36 HTML-файлов. На главной странице — structure.htm — размещены ссылки на ключевые страницы всей группы.

На диске, прилагаемом к книге, вы найдете папку HelpPages с готовыми файлами (Code\Glava8\HELP\HelpPages).

Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989