2011-01-14 7 views
1

Я использую C# 3.0 в .NET Compact Framework 3.5, и программа должна работать на обоих устройствах Windows Mobile и Windows CE.C# Как Перевести клавиатуру Вход в текст

Я создал свой собственный элемент управления текстовым полем. Он не наследуется от TextBox или любого другого типа текстового поля, и это не вариант. Как я могу перевести ввод с клавиатуры в текст, чтобы я мог правильно настроить свойство Text элемента управления на то, что пользователь вводит? Что касается свойства Text, это просто обычная строковая переменная и не нуждается в более продвинутом, чем свойство TextBox.Text.

Я знаю, что один из способов - подписаться на событие KeyDown и перевести параметр KeyEventArgs в текст вручную для каждого символа. Я надеюсь, что есть лучшее решение, где перевод ввода с клавиатуры на текст выполняется для меня каркасом или ОС. Спасибо.

Что делать, если бы я должен был иметь невидимый TextBox и передавать на него все входные данные клавиатуры, а также настроить мои свойства. Текст-текст будет таким же, как и TextBoxe при каждом изменении его текста. Есть ли способ сделать это?

+0

Невозможно встроить реальный текстовый блок в свой контроль? вам не нужно наследовать от одного – Simon

+0

Я не могу встроить другие элементы управления в мой, потому что все чертежи являются обычными. Мое управление называется AlphaTextBox, и оно наследуется от элемента управления AlphaLabel из библиотеки AlphaMobileControls: http://alphamobilecontrols.codeplex.com/ –

ответ

0

Я думаю, что вы ищете класс KeyConverter. Однако я не знаю, является ли это частью компактной структуры.

1

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

public class MyControl : Control 
{ 
    private int m_cursorPos = 0; 

    public MyControl() 
    { 
     Text = string.Empty; 
     CursorPos = 0; 
    } 

    private int CursorPos 
    { 
     get { return m_cursorPos; } 
     set 
     { 
      if(value < 0) value = 0; 
      if(value > Text.Length) value = Text.Length; 

      m_cursorPos = value; 
     } 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Back: 
       if (CursorPos > 0) 
       { 
        CursorPos--; 
        Text = Text.Remove(CursorPos, 1); 
       } 
       break; 
      case Keys.Delete: 
       if (CursorPos < Text.Length - 1) 
       { 
        Text = Text.Remove(CursorPos, 1); 
       } 
       break; 
      case Keys.Left: 
       CursorPos--; 
       break; 
      case Keys.Right: 
       CursorPos++; 
       break; 
      default: 
       base.OnKeyDown(e); 
       break; 
     } 
    } 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
     if (char.IsLetterOrDigit(e.KeyChar) 
       || char.IsSymbol(e.KeyChar) 
       || char.IsPunctuation(e.KeyChar) 
       || char.IsWhiteSpace(e.KeyChar)) 
     { 
      Text = Text.Insert(CursorPos, char.ToString(e.KeyChar)); 
      CursorPos++; 
      Debug.WriteLine(this.Text); 
     } 
    } 
} 

Конечно же, вы должны решить, как сделать визуализацию, и если у вас есть многострочная поддержка, это не будет обрабатывать клавиши вверх/вниз.

Смежные вопросы