【问题标题】:How to turn on caps lock whenever rich text box has focus富文本框有焦点时如何打开大写锁定
【发布时间】:2013-04-14 02:36:32
【问题描述】:

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

【问题讨论】:

    标签: c# .net richtextbox


    【解决方案1】:

    我建议改为捕获键输入并将其替换为相关的大写版本。否则,想象一下这样一种情况:用户在文本框中单击,切换到另一个应用程序,意识到 Caps Lock 已打开,出于沮丧向他们的计算机扔砖头,然后切换回您的应用程序,此时光标位于文本框中,需要大写字母字母,但 Caps Lock 现已关闭。

    【讨论】:

    • +1 这也很明显,但是您可以使用 KeyDown 事件在您键入时将文本大写(或更改文本,但这可能会产生闪烁)。你可以,我想,使用大写锁定,但捕获离开事件来关闭大写锁定,但我不赞成这样做。
    • 这就是我所说的捕获键输入的意思。无论什么活动效果最好。
    • 唯一的问题是,有时用户实际上想要输入小写字母。 95% 的输入应该是大写,但有 5% 的机会是小写。
    • @icemanind:你也可以把大写字母变成小写。
    • @John:这是一个很好的论点。理想情况下,我希望能够在我的 RichTextBox 获得焦点时强制大写锁定,但如果它失去焦点,包括完全切换到另一个程序,我想恢复大写锁定在我之前的状态RichTextBox 接收焦点。这样一来,整个大写锁定对用户来说几乎是透明的。
    【解决方案2】:

    这种情况通常通过捕获关键事件之一并更改数据来解决。切换 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);            
        }
    }
    

    【讨论】:

      【解决方案3】:

      即使使用 Win32 API 也做不到。

      以下代码将告诉您 CAPS LOCK 是否已打开,但 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;
      }
      

      【讨论】:

        【解决方案4】:

        好吧,有很多方法可以查看这一点,如果您想要客户端大写,那么像 Jquery capitalizer 这样的东西会在键入过程中自动将文本转换为大写,如果挂钩到 keyup 事件。

        或者,如果您想要服务器端大写,那么您可以在往返过程中使用 C# 到 String.ToUpper() 方法。

        【讨论】:

        • 他的richtextbox标签让我觉得这是winforms或WPF
        • 听起来你现在很可能提到它
        【解决方案5】:

        我不认为打开大写锁定是最好的解决方案。您最好订阅诸如 textchanged 之类的事件并将输入转换为大写。

        这应该包括一些东西也被粘贴到盒子里的情况..

        【讨论】:

          【解决方案6】:

          我会使用 KeyUp 事件,获取 .Text 中的最后一个字符并使用 ToUpper()。简单高效。

          【讨论】:

          • 你假设人们从不编辑他们已经输入的内容。
          • 道格拉斯有道理。一个确定的目标是对整个字符串使用 ToUpper。
          • 然后上面有icemanind的评论:“95%的输入应该是大写的,但是有5%的几率是小写的。”
          【解决方案7】:

          Console.capsLock == true 我告诉你大写锁定是否开启

          【讨论】:

          • 他问的不是控制台项目。
          猜你喜欢
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多