我们的一位客户希望所有输入的数据都是大写的。我不想通过文本框等来做文本框。
是否可以在应用程序级别执行此操作?
答案 0 :(得分:1)
解决方案1:如果您想在UpperCase
中阅读UserInput,可以使用ToUpper()
方法。
试试这个:
String str=textBox1.Text.ToUpper();
解决方案2:
如果您要显示并阅读UpperCase
中的UserInput,您可以处理TextChanged
的{{1}}事件,如下所示:
TextBox
答案 1 :(得分:0)
您可以编写一次KeyPress事件。
private void txtBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= 'a' && e.KeyChar <= 'z')
e.KeyChar -= (char)32;
}
32只是小写和大写字母之间ASCII值的差异。
答案 2 :(得分:0)
您可以对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:您可能有兴趣通过添加新属性来创建此变体,以将TextBox设置为普通,仅限大写或小写。您可能还想创建一种机制来控制AppDomain中所有实例的此属性(提示:可以是静态字段)。为什么?因为你不知道客户还要求下一步。