【发布时间】:2013-04-14 02:36:32
【问题描述】:
我有一个带有富文本框控件的表单。有没有办法在富文本框控件有焦点时打开大写锁定?如果富文本框失去焦点,将其关闭?我正在使用 C#
【问题讨论】:
标签: c# .net richtextbox
我有一个带有富文本框控件的表单。有没有办法在富文本框控件有焦点时打开大写锁定?如果富文本框失去焦点,将其关闭?我正在使用 C#
【问题讨论】:
标签: c# .net richtextbox
我建议改为捕获键输入并将其替换为相关的大写版本。否则,想象一下这样一种情况:用户在文本框中单击,切换到另一个应用程序,意识到 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 是否已打开,但 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;
}
【讨论】:
好吧,有很多方法可以查看这一点,如果您想要客户端大写,那么像 Jquery capitalizer 这样的东西会在键入过程中自动将文本转换为大写,如果挂钩到 keyup 事件。
或者,如果您想要服务器端大写,那么您可以在往返过程中使用 C# 到 String.ToUpper() 方法。
【讨论】:
我不认为打开大写锁定是最好的解决方案。您最好订阅诸如 textchanged 之类的事件并将输入转换为大写。
这应该包括一些东西也被粘贴到盒子里的情况..
【讨论】:
我会使用 KeyUp 事件,获取 .Text 中的最后一个字符并使用 ToUpper()。简单高效。
【讨论】:
Console.capsLock == true 我告诉你大写锁定是否开启
【讨论】: