繁体   English   中英

如果富文本框具有焦点,如何打开大写锁定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM