我有一个带有丰富文本框控件的表单。有没有办法在富文本框控件具有焦点时启用大写锁定?如果富文本框失去焦点,请将其关闭?我正在使用C#
答案 0 :(得分:5)
我建议改为捕获键输入并用相关的大写版本替换它。否则,想象一下用户在文本框中单击,切换到另一个应用程序,实现Caps Lock打开的情况,在沮丧的情况下在他们的计算机上抛出一块砖,然后切换回您的应用程序,其中光标位于文本框中,期望大写字母但Caps Lock现已关闭。
答案 1 :(得分:4)
通常通过捕获其中一个关键事件并更改数据来解决此问题。切换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);
}
}
答案 2 :(得分:2)
即使使用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;
}
答案 3 :(得分:0)
有很多方法可以看看这个,如果你想要客户端资本化,那么像Jquery capitalizer这样的东西会在键入时自动将文本转换成大写,如果挂钩,比如keyup事件。
或者,如果您想要服务器端资本化,那么您可以在往返中使用C#到String.ToUpper()方法。
答案 4 :(得分:0)
我不认为转动大写锁定是最好的解决方案..您可能最好订阅像textchanged这样的事件并将输入转换为大写。
这应该包括将东西粘贴到盒子中的情况。
答案 5 :(得分:0)
我会使用KeyUp事件,获取.Text中的最后一个字符并使用ToUpper()。简单而有效。
答案 6 :(得分:0)
Console.capsLock == true我告诉你是否大写锁定