Опубликован: 11.09.2006 | Доступ: свободный | Студентов: 7646 / 472 | Оценка: 4.26 / 3.45 | Длительность: 30:46:00
ISBN: 978-5-9556-0080-2
Лекция 8:

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

Создание интерактивной справки. Элемент управления Help Provider

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

При создании нового подключения в программе HyperTerminal, щелкнув на кнопку с вопросом можно получить краткое описание элемента

Рис. 8.20. При создании нового подключения в программе HyperTerminal, щелкнув на кнопку с вопросом можно получить краткое описание элемента

Создадим подобную функциональность на форме FindForm проекта NotepadCSharp. Открываем проект и перетаскиваем на форму FindForm элемент управления HelpProvider из окна Toolbox. Добавляем к имеющимся следующие свойства формы:

FindForm, свойство Значение
FormBorderStyle FixedDialog
HelpButton True
MaximizeBox False
MinimizeBox False

Заголовок формы изменился — на нем появилась кнопка с вопросительным знаком. На форме расположены пять видимых элементов управления — текстовое поле, две кнопки и два чекбокса. В свойстве ShowHelp on helpProvider1 каждого из этих элементов устанавливаем значение True. Текст, введенный в поле свойства HelpString on helpProvider1, будет появляться в качестве описания элемента. Установим следующие значения этого свойства:

Элемент Описание
txtFind Введите текст для поиска
cbMatchCase Найти с учетом регистра
cbMatchWhole Найти по целому слову
btnOK Выделить слово и закрыть форму
btnCancel Закрыть форму

Запускаем приложение. При щелчке на выбранном элементе появляется его описание (рис. 8.21).

Описание элемента

Рис. 8.21. Описание элемента

Всплывающие подсказки. Элемент управления ToolTip

C всплывающими подсказками мы уже сталкивались в "Работа с элементами управления" в приложении NotepadCSharp — свойство ToolTipText кнопок панели инструментов toolBarMain позволяло устанавливать всплывающие подсказки. Это же свойство есть у панелей строки состояния StatusBar — мы выводили в него текущую дату. Для добавления всплывающих подсказок ко всем прочим объектам используется элемент управления ToolTip. Перетаскиваем его из окна ToolBox на форму FindForm. В окне Properties расположенных на форме элементов и в самой форме появилось свойство ToolTip on toolTip1. Устанавливаем следующие значения этого свойства:

Элемент Описание
txtFind Текст для поиска
cbMatchCase Поиск с учетом регистра
cbMatchWhole Поиск по целому слову
btnOK Найти слово
btnCancel Закрыть форму

Запускаем приложение. При наведении курсора на элемент управления появляется его подсказка (рис. 8.22).

Всплывающая подсказка элементов управления

Рис. 8.22. Всплывающая подсказка элементов управления

Для появления подсказки необходимо, чтобы курсор оставался неподвижным на элементе в течение определенного промежутка времени. По умолчанию это время равно полсекунде. Для его изменения в окне Properties самого элемента toolTip1 устанавливаем нужное значение в миллисекундах в свойстве IntitialDelay.

Перевод приложений

При распространении приложения приходится задумываться о переводе пользовательского интерфейса на другие языки. При переводе больших пакетов, как правило, создается локальная версия целиком на одном языке. Это самый простой способ перевода программ. Другие программы, такие как Total Commander или Alcohol 120%, содержат многоязычный интерфейс, позволяющий менять оформление приложения непосредственно в ходе работы. Далее мы рассмотрим оба этих способа.

Автоматический выбор языка

В ходе установки операционной системы Windows при определении региональных параметров пользователю предлагается выбрать язык стандартов и форматов. Выбранное значение доступно для изменения в дальнейшем — в меню "Пуск" выбираем "Панель управления\Язык" и региональные параметры, вкладка "Региональные параметры" (рис. 8.23).

Инструмент "Язык и региональные параметры" Панели управления

Рис. 8.23. Инструмент "Язык и региональные параметры" Панели управления

Сделаем приложение, которое автоматически будет определять установленный язык стандартов и выводить соответствующий пользовательский интерфейс. Создаем новый Windows-проект, называем его SimpleCulture. Добавляем на форму кнопку и главное меню, устанавливаем следующие значения свойства Text этих элементов (рис. 8.24).

Приложение SimpleCulture. Размер формы — 300х128 пикселей

Рис. 8.24. Приложение SimpleCulture. Размер формы — 300х128 пикселей

Значения свойств Name изменять не будем — наш проект достаточно прост, чтобы тратить на это время. Для кнопки устанавливаем обработчик, закрывающий форму:

private void button1_Click(object sender, System.EventArgs e)
  {
    this.Close();
  }

Итак, у нас получилась версия программы с интерфейсом на английском языке. В окне Properties формы устанавливаем свойству Localizable значение True. Это свойство разрешает поддержку многоязычного интерфейса. В свойстве Language выбираем значение English (United States). В выпадающем списке этого свойства доступны практически все языки мира с учетом региона; так, английскому языку соответствует 14 значений. Компилируем приложение. В свойстве Language выбираем Russian (Russia). Изменяем свойство Text элементов, просто удаляя названия на английском языке (рис. 8.25).

Приложение SimpleCulture с интерфейсом на русском языке. Размер формы — 264х208 пикселей

Рис. 8.25. Приложение SimpleCulture с интерфейсом на русском языке. Размер формы — 264х208 пикселей

При изменении значения свойства Language форма теперь меняет пользовательский интерфейс. Обратите внимание на то, что значение Default этого свойства не является тождественным значению English (United States)! В этом можно убедиться, изменив размер формы или текст на кнопке в локальной версии, а затем переключившись на Default. Более того, при разработке интерфейса на нескольких языках следует выполнить основную функциональность приложения в значении Default, а затем заняться его локализацией — при переключении на другие языки интерфейс наследуется только от Default!

Переходим в код формы. Подключаем пространство имен Threading:

using System.Threading;

В конструкторе формы до (!) InitializeComponent устанавливаем культуру пользовательского интерфейса равной текущей культуре:

public Form1()
    
{
  Thread.CurrentThread.CurrentUICulture = 
  Thread.CurrentThread.CurrentCulture;
  InitializeComponent();
  }

Под культурой понимается язык и регион, под текущей культурой — соответствующие настройки инструмента "Язык и региональные параметры". Запускаем приложение. Среда CLR проверяет установленный язык и выводит приложение с русским интерфейсом. Закрываем его, переходим в "Панель управления" и устанавливаем язык "Английский (США)" на вкладке "Региональные параметры" в настройках инструмента "Язык и региональные параметры". Снова запускаем приложение. Теперь интерфейс приложения — на английском языке.

При локализации приложения среда Visual Studio .NET создает сборку, в которой хранятся все данные о приложении. В окне Solution Explorer нажимаем на кнопку (Show All Files) для просмотра добавленных файлов (рис. 8.26).

Добавление сборок при локализации приложения

Рис. 8.26. Добавление сборок при локализации приложения

Названия файлов-ресурсов (Form1. en-US и Form1.ru-RU) содержат в себе указание на язык (первая часть – en или ru) и регион (вторая часть US или RU). При создании собственных файлов-ресурсов следует придерживаться этого правила.

Область Windows Form Designer generated code также изменяется — теперь в ней содержатся свойства элементов, извлекаемые из сборок.

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

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

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

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

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

Затем:

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

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

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

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