[英]How to turn on caps lock whenever rich text box has focus
我有一个带有丰富文本框控件的表单。 有没有办法在富文本框控件具有焦点时启用大写锁定? 如果富文本框失去焦点,请将其关闭? 我正在使用C#
我建议改为捕获键输入并用相关的大写版本替换它。 否则,想象一下用户在文本框中单击,切换到另一个应用程序,实现Caps Lock打开的情况,在沮丧的情况下在他们的计算机上抛出一块砖,然后切换回您的应用程序,其中光标位于文本框中,期望大写字母但Caps Lock现已关闭。
通常通过捕获其中一个关键事件并更改数据来解决此问题。 切换CAPS LOCK键不是最佳的,因为许多用户仍然会使用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也无法做到这一点。
以下代码将告诉您CAPS LOCK是否为On但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资本化器这样的东西会在键入时自动将文本转换为大写,如果挂钩,比如keyup事件。
或者,如果您想要服务器端资本化,那么您可以在往返中使用C#到String.ToUpper()方法。
我不认为转动大写锁定是最好的解决方案..你可能最好订阅像textchanged这样的事件并将输入转换为大写。
这应该包括将东西粘贴到盒子里的情况。
我会使用KeyUp事件,获取.Text中的最后一个字符并使用ToUpper()。 简单高效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.