如何在富文本框获得焦点时打开大写锁定

3

我有一个包含富文本框控件的表单。是否有一种方法可以在富文本框控件获得焦点时打开大写锁定?并在失去焦点时关闭它?我正在使用C#。

7个回答

5

我建议捕获键盘输入并将其替换为相应的大写版本。否则,想象一下这样一种情况:用户点击文本框,切换到另一个应用程序,意识到大写锁定已开启,因沮丧而向电脑扔了一块砖头,然后切换回您的应用程序,在文本框中光标处于期望大写字母的状态,但大写锁定现在已关闭。


+1 另外可能很明显,但您可以使用KeyDown事件在键入时将文本大写(或TextChanged,但这可能会创建闪烁)。您可以使用大写锁定,但捕获Leave事件以关闭大写锁定,但我不喜欢这种方法。 - Christopher Edwards
这就是我所说的捕获关键输入。无论哪种事件最适合。 - John Sheehan
唯一的问题是,有时用户实际上想要输入小写字母。95% 的输入应该是大写的,但有 5% 的概率是小写的。 - Icemanind
@icemanind:你也可以把大写字母转换成小写字母。 - Sasha Chedygov
@John:这是一个很好的论点。理想情况下,我希望能够在我的RichTextBox获得焦点时强制打开大写锁定,但如果它失去焦点,包括完全切换到另一个程序,我希望恢复CAPS锁定之前RichTextBox获得焦点的状态。这样,整个大写锁定的事情对用户来说几乎是透明的。 - Icemanind
我认为更好的做法是在用户离开输入框后再进行输入转换,否则他们会得到意外的结果。"我在输入一个大小写字母,但它显示成了另一个,是我的大写锁定键开启了吗?" 这可能不是一个长期的可用性问题,但却是一个令人困惑的第一次体验。 - John Sheehan

4

这种情况通常通过捕获关键事件并更改数据来解决。切换大写锁定键并不是最佳选择,因为许多用户仍然会使用SHIFT(自动),这将给您小写字母。此外,对于一些用户(例如我),这可能感觉奇怪。我建议使用KeyPress而不是Ed.C建议的KeyUp,因为它在事件中直接给出了实际字符:

public partial class Form1 : Form
{        
    public Form1()
    {
        InitializeComponent();
        richTextBox1.KeyPress += new KeyPressEventHandler(richTextBox1_KeyPress);            
    }

    void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.KeyChar = Char.ToUpper(e.KeyChar);            
    }
}

2

即使使用Win32 API也无法做到。

以下代码可以告诉您是否开启了大写锁定键,但该API没有等效的SetKeyState函数。

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true, CallingConvention=CallingConvention.Winapi)] 
public static extern short GetKeyState(int keyCode); 

public void getCapsLockState() {
    bool CapsLock = (((ushort) GetKeyState(0x14 /*VK_CAPITAL*/)) & 0xffff) != 0;
}

0

Console.capsLock == true 可以告诉你大写锁定是否开启


他并不是在询问关于控制台项目的事情。 - user1803300

0

看待这个问题有很多方法,如果你想要客户端的文本大写化,那么类似于 Jquery capitalizer 这样的东西可以在键盘输入时自动将文本转换为大写字母。

或者如果你想要服务端的文本大写化,那么你可以使用 C# 的 String.ToUpper() 方法进行来回转换。


1
他的richtextbox标签让我想到这可能是WinForms或WPF。 - John Sheehan
提到这点,听起来很有可能。 - amelvin

0

我认为打开大写锁定不是最好的解决方案...你最好订阅像textchanged这样的事件,并将输入转换为大写字母。

这应该也可以处理粘贴到框中的情况...


0
我会使用KeyUp事件,获取.Text中的最后一个字符并使用ToUpper()。简单而高效。

你假设人们从不编辑他们已经输入的内容。 - Douglas
道格拉斯说得对。一个确定的方法是使用 ToUpper 将整个字符串转换为大写。 - Ed.C
然后还有icemanind在上面的评论:“95%的输入应该是大写的,但有5%的机会是小写的。” - Douglas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接