首页 > 解决方案 > C# TextBox 自动大写锁定

问题描述

我需要以下代码:当我按下 shift 键时,我会在 TextBox 中写小写字母,否则我会写大写字母,例如“反向”或一直按下 Caps Lock 键。所以这个代码和其他类似的代码是无能为力的,因为只有一种字母大小:

textBox1.CharacterCasing = CharacterCasing.Upper;
textBox1.CharacterCasing = CharacterCasing.Lower;

感谢帮助 !

标签: c#keycapslocktouppertolower

解决方案


最简单的选择是更改TextChanged事件方法中的文本。输入字符后,更改其布局。但是您必须记住,文本可以粘贴/剪切。

如果你忽略这个问题,你可以使用这个简单的例子:

public partial class Form1 : Form
{
    int last_len = 0;
    bool char_to_lower = false;
    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        // save last cursor position
        var select_index = textBox1.SelectionStart;
        // if text not delete - change char casing
        if (textBox1.Text.Length > last_len && select_index > 0)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(textBox1.Text.Take(select_index - 1).ToArray());

            // check SHIFT and CAPS
            if (char_to_lower || Control.IsKeyLocked(Keys.CapsLock))
                sb.Append(textBox1.Text[select_index - 1].ToString().ToLower());
            else
                sb.Append(textBox1.Text[select_index - 1].ToString().ToUpper());

            sb.Append(textBox1.Text.Skip(select_index).ToArray());

            // insert new text in textBox
            textBox1.Text = sb.ToString();
            // return cursor position
            textBox1.SelectionStart = select_index;
        }
        // save last length
        last_len = textBox1.Text.Length;
    }

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Shift) char_to_lower = true;
    }

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Shift) char_to_lower = false;
    }
}

推荐阅读