Рис. 9.5. Полный текст в текстовом поле
Пользователь может самостоятельно дописать слова песни в новом окне и выбрать команду Done
или отказаться от подтверждения ввода с помощью команды Cancel
.
То же самое касается и элемента ComboBox
. Данный элемент получает окантовку при получении фокуса и отображает уже два треугольника. Чтобы раскрыть список элементов, хранящихся в комбинированном окне, необходимо сначала установить фокус и нажать на кнопку Enter
. При этом будет открыто новое окно, в котором с помощью клавиш навигации пользователь может выбрать необходимый элемент и выполнить команду меню Done
.
Существует также альтернативный способ выбора элемента из ComboBox
. Для этого нужно опять установить фокус на комбинированном окне и прокручивать имеющиеся записи при помощи кнопок навигации Влево
или Вправо
.
Режимы ввода
Первые модели сотовых телефонов для отправки сообщений имели только один режима ввода. Пользователь нажимал на кнопки телефона в определенном порядке, вводя тот или иной символ. Затем появились другие режимы. В частности, сейчас поддерживается числовой режим, так называемый режим T9 и символьный режим. Поначалу библиотека .NET Compact Framework не имела поддержки режимов ввода. Поэтому для установки необходимого режима программистам приходилось использовать механизм P/Invoke для вызова функций API, как показано в листинге 9.2.
[DllImport("coredll.dll", EntryPoint = "SendMessage")]
private static extern uint SendMessage(IntPtr hWnd, uint msg,
uint wParam, uint lParam);
// Сообщение для режима ввода
const uint EM_SETINPUTMODE = 0x00DE;
// Перечисление режимов ввода
public enum InputModeAPI {
Spell = 0,
T9 = 1,
Numbers = 2,
Text = 3
}
public static void SetInputMode(Control ctrl, InputModeAPI mode) {
SendMessage(ctrl.Handle, EM_SETINPUTMODE, 0, (uint)mode);
}
private void mnuT9_Click(object sender, EventArgs e) {
SetInputMode(textBox3, InputModeAPI.T9);
}
private void mnuSpell_Click(object sender, EventArgs e) {
SetInputMode(textBox3, InputModeAPI.Spell);
}
private void mnuNumeric_Click(object sender, EventArgs e) {
SetInputMode(textBox3, InputModeAPI.Numbers);
}
private void mnuText_Click(object sender, EventArgs e) {
SetInputMode(textBox3, InputModeAPI.Text);
}
В данном примере нужный режим ввода указывается для текстового поля textBox3
с помощью системы меню (рис. 9.6).
Рис. 9.6. Выбираем режим ввода
Режим T9 в эмуляторе не работает, поэтому надо проверять код на реальном устройстве.
В библиотеке .NET Compact Framework 2.0 появилась возможность контролировать режим ввода текста с помощью класса InputModeEditor
. Данный режим распространяется только на текстовые поля.
Предположим, что в программе есть два текстовых поля. В одном поле пользователь должен ввести свое имя, а во втором — номер телефона. В первом случае пользователь будет использовать буквы, а во втором случае ему необходимы только цифры. Поэтому можно заранее задать нужный режим ввода текста для разных текстовых полей. Для этого надо указать ссылку на сборку Microsoft.WindowsCE.Forms
и задействовать класс InputModeEditor
, как показано в листинге 9.3.
private void Form1_Load(object sender, EventArgs e) {
// Устанавливаем текстовый режим ввода текста
InputModeEditor.SetInputMode(txtName, InputMode.AlphaCurrent);
// Устанавливаем числовой режим ввода текста
InputModeEditor.SetInputMode(txtPhone, InputMode.Numeric);
}
Переопределение клавиш Soft Key