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

时间:2010-10-17 22:31:57

标签: c# .net richtextbox

我有一个带有丰富文本框控件的表单。有没有办法在富文本框控件具有焦点时启用大写锁定?如果富文本框失去焦点,请将其关闭?我正在使用C#

7 个答案:

答案 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我告诉你是否大写锁定