c# - C# TextBox 自动大写锁定
问题描述
我需要以下代码:当我按下 shift 键时,我会在 TextBox 中写小写字母,否则我会写大写字母,例如“反向”或一直按下 Caps Lock 键。所以这个代码和其他类似的代码是无能为力的,因为只有一种字母大小:
textBox1.CharacterCasing = CharacterCasing.Upper;
textBox1.CharacterCasing = CharacterCasing.Lower;
感谢帮助 !
解决方案
最简单的选择是更改TextChanged
事件方法中的文本。输入字符后,更改其布局。但是您必须记住,文本可以粘贴/剪切。
如果你忽略这个问题,你可以使用这个简单的例子:
public partial class Form1 : Form
{
int last_len = 0;
bool char_to_lower = false;
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
// save last cursor position
var select_index = textBox1.SelectionStart;
// if text not delete - change char casing
if (textBox1.Text.Length > last_len && select_index > 0)
{
StringBuilder sb = new StringBuilder();
sb.Append(textBox1.Text.Take(select_index - 1).ToArray());
// check SHIFT and CAPS
if (char_to_lower || Control.IsKeyLocked(Keys.CapsLock))
sb.Append(textBox1.Text[select_index - 1].ToString().ToLower());
else
sb.Append(textBox1.Text[select_index - 1].ToString().ToUpper());
sb.Append(textBox1.Text.Skip(select_index).ToArray());
// insert new text in textBox
textBox1.Text = sb.ToString();
// return cursor position
textBox1.SelectionStart = select_index;
}
// save last length
last_len = textBox1.Text.Length;
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Shift) char_to_lower = true;
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Shift) char_to_lower = false;
}
}
推荐阅读
- angular - 如何在Angular中接收MatDialog的滚动事件
- python - jython 到 python 版本的映射
- ruby-on-rails - ReferenceError:导航器未在 Ruby on Rails 服务器端渲染上使用 ReactJS 定义
- laravel - 如何修复 laravel 5.5 中的 App_url 错误
- node.js - 运行 node.js 应用程序时出现错误(也使用 rabbit)
- xamarin - ASP.NET Core Web API 与 ASP.NET Core 应用程序
- javascript - TypeError: $(...).sortable 不是 Angular 中的函数
- javascript - TypeError:React 中的循环对象值
- android - 带有 Generic 的 Kotlin 扩展功能不适用于 Any?
- sql - Snowflake CLI (Snowsql) - 查询标记