我有一个包含富文本框控件的表单。是否有一种方法可以在富文本框控件获得焦点时打开大写锁定?并在失去焦点时关闭它?我正在使用C#。
我有一个包含富文本框控件的表单。是否有一种方法可以在富文本框控件获得焦点时打开大写锁定?并在失去焦点时关闭它?我正在使用C#。
我建议捕获键盘输入并将其替换为相应的大写版本。否则,想象一下这样一种情况:用户点击文本框,切换到另一个应用程序,意识到大写锁定已开启,因沮丧而向电脑扔了一块砖头,然后切换回您的应用程序,在文本框中光标处于期望大写字母的状态,但大写锁定现在已关闭。
这种情况通常通过捕获关键事件并更改数据来解决。切换大写锁定键并不是最佳选择,因为许多用户仍然会使用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);
}
}
即使使用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;
}
Console.capsLock == true 可以告诉你大写锁定是否开启
看待这个问题有很多方法,如果你想要客户端的文本大写化,那么类似于 Jquery capitalizer 这样的东西可以在键盘输入时自动将文本转换为大写字母。
或者如果你想要服务端的文本大写化,那么你可以使用 C# 的 String.ToUpper() 方法进行来回转换。
我认为打开大写锁定不是最好的解决方案...你最好订阅像textchanged这样的事件,并将输入转换为大写字母。
这应该也可以处理粘贴到框中的情况...