C# 在应用程序级别输入大写数据

C# 在应用程序级别输入大写数据,c#,winforms,C#,Winforms,我们的一个客户希望所有输入的数据都是大写的。我不想一个接一个地做 有什么方法可以在应用程序级别执行此操作吗?解决方案1:如果您想以大写形式读取用户输入,可以使用ToUpper()方法 试试这个: String str=textBox1.Text.ToUpper(); 解决方案2: 如果您想以大写显示和读取用户输入,您可以如下处理文本框的文本更改事件: private void textBox1_TextChanged(object sender, EventArgs e) {

我们的一个客户希望所有输入的数据都是大写的。我不想一个接一个地做


有什么方法可以在应用程序级别执行此操作吗?

解决方案1:如果您想以
大写形式读取用户输入,可以使用
ToUpper()
方法

试试这个:

String str=textBox1.Text.ToUpper();
解决方案2:

如果您想以
大写
显示和读取用户输入,您可以如下处理
文本框
文本更改
事件:

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        textBox1.Text = textBox1.Text.ToUpper();
        textBox1.Select(textBox1.Text.Length, 0);
    }

您可以编写一次按键事件

   private void txtBox_KeyPress(object sender, KeyPressEventArgs e)
   {
      if (e.KeyChar >= 'a' && e.KeyChar <= 'z')
      e.KeyChar -= (char)32;
   }
private void txtBox\u按键(对象发送器,按键事件参数e)
{

如果(e.KeyChar>='a'&&e.KeyChar您可以对TextBox控件进行子类化,创建一个仅适用于大写的派生类,并使用您的派生类而不是原始TextBox

这是一种可能的实现方法:

using System;

namespace UpperCaseTextBox
{
    public class UpperCaseTextBox : System.Windows.Forms.TextBox
    {
        protected override void OnTextChanged(EventArgs e)
        {
            var selectionStart = this.SelectionStart;
            var selectionLength = this.SelectionLength;
            this.Text = this.Text.ToUpper();
            this.SelectionStart = selectionStart;
            this.SelectionLength = selectionLength;
            base.OnTextChanged(e);
        }
    }
}
上面的代码已经过测试,尽管只是为了演示

注1:我建议在单独的dll项目中执行此操作,这样会更易于使用(在将控件放入窗体设计器之前,必须编译并生成该控件)和维护。如果决定创建dll,请记住,需要在dll中添加对System.Windows.Forms的引用,还需要在winforms应用程序中添加对dll的引用才能使用它


注意2:您可能有兴趣通过添加新属性来创建此属性的变体,以将文本框设置为普通、仅大写或仅小写。您可能还希望创建一种机制来控制AppDomain中所有实例的此属性(提示:这可以是静态字段).为什么?因为你不知道客户下一步还会要求什么。

什么是应用程序级别?你可以始终使用
.ToUpper()
应用程序中有许多表单。网格控件、文本框和表单上的文本框。我的意思是,如果可能的话,我想在一个点上集中实现它。可能挂接按键等。所有数据输入都必须大写。不仅是特定的。可能挂接按键等的消息队列可以解决它。为表单实现这一点会更好.虽然这是一个巧妙的技巧,但当用户输入基本拉丁字母表之外的字母时,它将失败。