MUK*_*FNA 19 c# asp.net visual-studio-2008
我是Visual Studio中的新手并使用visual Studio 2008.在一个项目中,我希望用户输入所有文本时都是大写的,而无需按Shift键或大写锁定.我用过这段代码
TextBox1.Text = TextBox1.Text.ToUpper();
Run Code Online (Sandbox Code Playgroud)
但是按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();
}
}
Run Code Online (Sandbox Code Playgroud)
有任何解决方案,请指导我.
Ste*_*eve 44
这是一个特定的属性.它被称为CharacterCasing,您可以将其设置为Upper
TextBox1.CharacterCasing = CharacterCasing.Upper;
Run Code Online (Sandbox Code Playgroud)
在ASP.NET中,您可以尝试将其添加到文本框样式中
style="text-transform:uppercase;"
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到一个例子:http://www.w3schools.com/cssref/pr_text_text-transform.asp
编辑完问题之后,你就是在使用ASP.NET.那里的情况非常不同(因为在这种情况下,非常不鼓励往返服务器).你可以用JavaScript做同样的事情(但是处理全球化toUpperCase()可能会很痛苦)或者你可以使用CSS类(依赖于浏览器实现).只需声明此CSS规则:
.upper-case
{
text-transform: uppercase
}
Run Code Online (Sandbox Code Playgroud)
并在文本框中添加大写类:
<asp:TextBox ID="TextBox1" CssClass="upper-case" runat="server"/>
Run Code Online (Sandbox Code Playgroud)
但是按Enter键后它会大写字符.
这取决于你放置代码的位置.例如,如果你把它放进去,TextChanged它会在你打字的时候做大写.
您拥有的产品可以满足您的需求CharacterCasing::
TextBox1.CharacterCasing = CharacterCasing.Upper;
Run Code Online (Sandbox Code Playgroud)
它可以或多或少地工作,但它不能很好地处理语言环境.例如,在德语ß中SS,当转换在上壳体(研究所献给德意志SPRACHE)和该属性不处理.
您可以模仿CharacterCasing在KeyPress事件处理程序中添加此代码的属性:
e.KeyChar = Char.ToUpper(e.KeyChar);
Run Code Online (Sandbox Code Playgroud)
不幸的是.NET框架没有正确处理这个问题,并且锐化s字符的大写字母不变.ß存在的大写版本,ẞ它可能会产生一些混淆,例如,如果使用"SS"以大写形式转换,则包含"ss"的单词和包含"ß"的另一个单词无法区分.别忘了:
但是,在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<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];
}
}
Run Code Online (Sandbox Code Playgroud)
然后我会有一个特定于德语的实现:
sealed class German : Unicode
{
protected override string ToUpperCore(string text)
{
// Very naive implementation, just to provide an example
return text.ToUpper().Replace("ß", "?");
}
}
Run Code Online (Sandbox Code Playgroud)
真正的实现可能会更复杂(并非所有操作系统都支持大写ẞ),而是作为概念证明.有关.NET上的Unicode问题的其他详细信息,请参阅此文章.
| 归档时间: |
|
| 查看次数: |
88265 次 |
| 最近记录: |