在文本框中键入时将文本转换为大写

我是Visual Studio中的新手并使用visual Studio 2008.在一个项目中,我希望用户键入所有文本,而不是按Shift键或大写锁定。 我用过这段代码

TextBox1.Text = TextBox1.Text.ToUpper(); 

但按Enter键后,它会大写字符。

我只想让用户在不按Shift键或没有大写锁定的情况下键入大写字母。

页面总代码为…

 public partial class Test : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void TextBox1_TextChanged(object sender, EventArgs e) { TextBox1.Text = TextBox1.Text.ToUpper(); } } 

有任何解决方案,请指导我。

这是一个特定的属性。 它被称为CharacterCasing ,您可以将其设置为Upper

  TextBox1.CharacterCasing = CharacterCasing.Upper; 

在ASP.NET中,您可以尝试将其添加到文本框样式中

  style="text-transform:uppercase;" 

你可以在这里找到一个例子: http : //www.w3schools.com/cssref/pr_text_text-transform.asp

编辑(适用于ASP.NET)

编辑完问题之后,你就是在使用ASP.NET。 那里的情况非常不同(因为在这种情况下,非常不鼓励往返服务器)。 您可以使用JavaScript执行相同的操作(但使用toUpperCase()来处理全球化可能会很麻烦)或者您可以使用CSS类(依赖于浏​​览器实现)。 只需声明此CSS规则:

 .upper-case { text-transform: uppercase } 

并在文本框中添加大写类:

  

一般(旧)答案

但按Enter键后,它会大写字符。

这取决于你放置代码的位置。 如果你把它放入,例如, TextChanged事件,它会在你键入时大写。

您有一个完全符合您需求的属性: CharacterCasing

 TextBox1.CharacterCasing = CharacterCasing.Upper; 

它可以或多或少地工作,但它不能很好地处理语言环境。 例如,在德语中,当用大写字母转换时, ßSS ( InstitutfürDeutscheSprache )并且此属性不能处理。

您可以模仿在KeyPress事件处理程序中添加此代码的CharacterCasing属性:

 e.KeyChar = Char.ToUpper(e.KeyChar); 

不幸的是,.NET框架没有正确处理这个问题,并且尖锐的s字符的大写字母返回不变。 ß的大写版本存在并且它是并且它可能产生一些混淆,例如包含“ss”的单词和包含“ß”的另一个单词如果使用“SS”以大写forms转换则无法区分。 别忘了 :

但是,在2010年,在全部大写字母中使用地名时,使用大写字母成为官方文件中的强制性要求。

除非你在.NET本地化中添加适当的代码来支持这个(以及其他)微妙的错误,否则你无能为力。 我能给你的最佳建议是根据你需要支持的每种文化使用自定义词典

最后不要忘记,这种转变可能会让您的用户感到困惑:例如,在土耳其,有两种不同版本i大写字母。

如果文本处理在您的应用程序中很重要,您可以使用专门的DLL为您支持的每个语言环境(如Word处理器)解决许多问题。

我通常做的是当我不得不处理特定于文化的问题时, 不要对字符串使用标准的.NET函数 (我只保留它们用于不变文化中的文本)。 我创建了一个带有静态方法的Unicode类,用于我需要的一切(字符计数,转换,比较)以及针对每种受支持语言的许多专用派生类。 在运行时,静态方法将使用当前线程文化名称从字典中选择适当的实现并将工作委托给它。 骨架可能是这样的:

 abstract class Unicode { public static string ToUpper(string text) { return GetConcreteClass().ToUpperCore(text); } protected virtual string ToUpperCore(string text) { // Default implementation, overridden in derived classes if needed return text.ToUpper(); } private Dictionary _implementations; private Unicode GetConcreteClass() { string cultureName = Thread.Current.CurrentCulture.Name; // Check if concrete class has been loaded and put in dictionary ... return _implementations[cultureName]; } } 

然后我会有一个特定于德语的实现:

 sealed class German : Unicode { protected override string ToUpperCore(string text) { // Very naive implementation, just to provide an example return text.ToUpper().Replace("ß", "ẞ"); } } 

真正的实现可能会更复杂(并非所有操作系统都支持大写ẞ),而是作为概念certificate。 有关.NET上的Unicode问题的其他详细信息,请参阅此文章 。

如果您可以在项目中使用LinqToObjects

 private YourTextBox_TextChanged ( object sender, EventArgs e) { return YourTextBox.Text.Where(c=> c.ToUpper()); } 

如果你不能使用LINQ(例如你的项目的目标FW是.NET Framework 2.0)那么

 private YourTextBox_TextChanged ( object sender, EventArgs e) { YourTextBox.Text = YourTextBox.Text.ToUpper(); } 

为什么选择Text_Changed事件?

框架中的用户输入事件很少..

1-) OnKeyPressed在按下并释放按键后用户从键盘按下按键时触发(开始工作)

2-)当用户在按键期间从键盘按下键时, OnKeyDown触发

3-) OnKeyUp在用户从键盘按下键并且键开始释放时触发(用户从键上取下手指)

如你所见,这三个都是关于键盘事件的。那么如果用户将一些数据复制并粘贴到文本框呢?

如果您使用其中一个键盘事件,那么您的代码只在用户使用键盘时工作..例如,如果用户使用鼠标单击屏幕键盘或复制粘贴数据,您在键盘事件中实现的代码永远不会触发(永远不会开始工作) )

所以,幸运的是还有另一种解决方法: Text Changed事件..

Text Changed事件并不关心数据的来源.Even可以是复制粘贴,触摸屏点击(如手机或平板电脑),虚拟键盘,鼠标点击屏幕键盘(某些银行操作使用此function更安全,或者可能是你的用户将是一个无法按下标准键盘的残疾人)或代码注入;)..

不管 !

Text Changed事件只是关心它的责任组件区域(此处, Your TextBox's Text区域)是否有任何变化..

如果发生任何更改,那么在Text更改事件下实现的代码将起作用。

将textbox1中的CssClass属性设置为“cupper”,然后在页面内容中创建新的css类:

  

然后,享受它……