Режимы ввода

Режимы ввода

Первые модели сотовых телефонов для отправки сообщений имели только один режима ввода. Пользователь нажимал на кнопки телефона в определенном порядке, вводя тот или иной символ. Затем появились другие режимы. В частности, сейчас поддерживается числовой режим, так называемый режим T9 и символьный режим. Поначалу библиотека .NET Compact Framework не имела поддержки режимов ввода. Поэтому для установки необходимого режима программистам приходилось использовать механизм P/Invoke для вызова функций API, как показано в листинге 9.2.

Листинг 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.

Листинг 9.3 Управление режимами ввода с помощью управляемого кода

private void Form1_Load(object sender, EventArgs e) {

 // Устанавливаем текстовый режим ввода текста

 InputModeEditor.SetInputMode(txtName, InputMode.AlphaCurrent);

 // Устанавливаем числовой режим ввода текста

 InputModeEditor.SetInputMode(txtPhone, InputMode.Numeric);

}