[英]C# How Translate Keyboard Input To Text
我在.NET Compact Framework 3.5中使用C#3.0,並且該程序需要能夠在Windows Mobile和Windows CE設備上運行。
我創建了自己的自定義文本框控件。 它不繼承自TextBox或任何其他類型的文本框控件,因此不能這樣做。 如何將鍵盤輸入轉換為文本,以便可以將控件的Text屬性正確設置為用戶鍵入的內容? 就Text屬性而言,它只是一個普通的字符串變量,不需要比TextBox.Text屬性更高級。
我知道一種方法是訂閱KeyDown事件,然后為每個字符手動將KeyEventArgs參數轉換為文本。 我希望有一個更好的解決方案,其中框架或OS為我完成鍵盤輸入到文本的翻譯。 謝謝。
如果我有一個不可見的TextBox並將所有鍵盤輸入通道引導到它,並且將控件的Text屬性設置為與TextBoxe的文本每次更改相同,該怎么辦? 有沒有辦法做到這一點?
將鍵轉換為字符串(不是文本,因為文本對我而言意味着諸如字體,大小,位置等)並不復雜。 這樣的事情可能會大大解決問題:
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);
}
}
}
當然,然后您必須決定如何進行渲染,並且如果您具有多行支持,它將無法處理上/下鍵。
我認為您正在尋找KeyConverter類。 不過,我不知道這是否是緊湊框架的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.