簡體   English   中英

C#如何將鍵盤輸入轉換為文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM