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

时间:2014-05-03 12:42:26

标签: c# asp.net visual-studio-2008

我是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();

    }
}

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

7 个答案:

答案 0 :(得分:41)

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

  TextBox1.CharacterCasing = CharacterCasing.Upper;

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

  style="text-transform:uppercase;"

您可以在此处找到示例:http://www.w3schools.com/cssref/pr_text_text-transform.asp

答案 1 :(得分:8)

编辑(对于ASP.NET)

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

.upper-case
{
    text-transform: uppercase
}

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

<asp:TextBox ID="TextBox1" CssClass="upper-case" runat="server"/>

一般(旧)答案

  

但按Enter键后大写字符。

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

您的财产可以完全满足您的需求:CharacterCasing

TextBox1.CharacterCasing = CharacterCasing.Upper;

它或多或少有效,但它不能很好地处理语言环境。例如,在德语中,ß在以大写(Institut für Deutsche Sprache)转换时为 SS ,并且此属性不处理该内容。

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

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

不幸的是,.NET框架没有正确处理这个问题,并且 sharp s 字符的大写字母不会更改。存在ß的大写版本并且它是并且它可能产生一些混淆,例如包含“ss”的单词和包含“ß”的另一个单词不能如果使用“SS”转换为大写,则区分。 Don't forget that

  

然而,在2010年,在全部大写字母中使用地名时,使用大写字母成为强制性的。

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

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

如果文本处理在您的应用程序中很重要,您可以使用专门的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<string, Unicode> _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("ß", "ẞ");
    }
}

真正的实现可能要复杂得多(并非所有操作系统都支持大写ẞ),而是作为概念证明。有关.NET上的Unicode问题的其他详细信息,另请参阅this post

答案 2 :(得分:1)

如果您可以在项目中使用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

当用户从键盘按下键并且键开始释放(用户从键中取出手指)时,会激活{p> 3-)OnKeyUp

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

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

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

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

无所谓!

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

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

答案 3 :(得分:0)

**/*Css Class*/**
.upCase
{
    text-transform: uppercase;
}

<asp:TextBox ID="TextBox1" runat="server" Text="abc" Cssclass="upCase"></asp:TextBox>

答案 4 :(得分:0)

我以前是使用VB.NET在ASP.NET上执行此操作的。

1)在所述文本框的属性中将AutoPostBack = True设置为

2)文本框代码(事件:TextChanged)    Me.TextBox1.Text = Me.TextBox1.Text.ToUpper

3)观察    在TextBox1中输入字符串变量后,当用户离开TextBox1时,    在“ TextChanged”事件中更改文本时,AutoPostBack将触发代码。

答案 5 :(得分:0)

我在Visual Studio 2008中遇到了同样的问题,并解决了将以下事件处理程序添加到文本框中的问题:

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if ((e.KeyChar >= 'a') && (e.KeyChar <= 'z'))
        {
            int iPos = textBox1.SelectionStart;
            int iLen = textBox1.SelectionLength;
            textBox1.Text = textBox1.Text.Remove(iPos, iLen).Insert(iPos, Char.ToUpper(e.KeyChar).ToString());
            textBox1.SelectionStart = iPos + 1;
            e.Handled = true;
        }
    }

即使您在选择了某些字符的文本框中键入小写字符,它也可以工作。 我不知道代码是否可以与多行文本框一起使用。

答案 6 :(得分:-1)

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

<style type="text/css">.cupper {text-transform:uppercase;}</style>

然后,享受它......