使用Windows Mobile 6.5和C#如何让文本框只显示大写字母?
CharacterCasing属性似乎从WinMo 6.5中丢失,我决定只捕获textchanged事件并使用ToUpper设置文本。
这是有效的 - 但在每次按键时,它都会将光标发回到字符串的开头,而不是结尾。
使用Windows Mobile 6.5和C#如何让文本框只显示大写字母?
CharacterCasing属性似乎从WinMo 6.5中丢失,我决定只捕获textchanged事件并使用ToUpper设置文本。
这是有效的 - 但在每次按键时,它都会将光标发回到字符串的开头,而不是结尾。
Ritu,只是为了评论你的答案。您应该记住,如果用户将脱字符放置在字符串中间以执行一些编辑,然后脱字符跳到字符串按键的末尾,用户可能会感到困惑。
另一种可能是在编辑控件失去焦点时将文本更改为大写。
我想通了。所以在textChanged事件中,我用ToUpper版本替换输入的文本。然后我将SelectionStart属性设置为Text.Length,将光标移动到最后。
如果您需要编辑已输入的文本,将文本位置设置为字符串末尾的解决方案似乎是一件麻烦事。
,因为我想到了C#的事件模型,但是,一个替代方法可能是赶上KeyPress
事件并更改任何小写KeyChar
值将它们传递到下一个处理程序之前为大写它已经有一段时间。
你接近的方式似乎是错误的。
有很多不同的方法可以将数据插入到该文本框中。那么复制&粘贴呢?
访问文本框
@downvoter:谨慎评论为什么? – citronas 2013-02-04 20:54:49
的值时()保存SelectionStart和SelectionLength改变文本之前就进行.Text.ToUpper。 ToUpper应该不改变长度,所以你可以简单地将SelctionStart和SelectionLength设置回原来的样子。
另外,当您将其设置为ToUpper时,我希望再次获得更改的事件。我不确定是否还需要检查ToUpper是否真的改变了任何内容,然后再次设置文本。当你分配文本并避免给你一个无限的递归循环的变化事件时,它可能足够聪明,可以为你检查。但是,您可能不希望在事件处理程序调用中更改选择,以避免未进行进一步更改的情况,只能在外部调用中将您指定回文本。所以你可以直接守护递归。
喜欢的东西:
bool m_InMyTextChanged = false;
private void txtMyText_TextChanged(object sender, EventArgs e)
{
if (m_InMyTextChanged)
return; // Recursive! We can bail quickly.
m_InMyTextChanged = true; // Prevent recursion when we change it.
int selectionStart = txtMyText.SelectionStart;
int selectionLength = txtMyText.SelectionLength;
string originalText = txtMyText.Text;
string newText = originalText.ToUpper();
if (newText != originalText)
{
txtMyText.Text = newText; // Will cause a new TextChanged event.
// Set the selection back *after* the assignment, which has reset them.
txtMyText.SelectionStart = selectionStart;
txtMyText.SelectionLength = selectionLength;
}
m_InMyTextChanged = false; // Allow it for next time.
}
可以工作。我没有在Windows Mobile上工作,但我认为这与.NET中的一般工作方式相同。
@downvoter(我猜这篇文章并不真正起作用),你应该发表评论,解释downvote的原因,而不仅仅是匿名地解释。 ......尤其是在最彻底的答案中,最完全地解决原始问题(在接受的答案中的更简单的替代方案在打字时不会“仅显示大写字母”;这个答案解决了保留克拉/选择并立即与新的输入 - 尽管它可以进一步细化)。 – 2017-07-12 21:44:31
我知道这是旧的,但希望这可以帮助别人。我实现了如下的KeyPress事件。
private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.KeyChar = Char.ToUpper(e.KeyChar);
}
这确实帮助了别人,谢谢你。 – WhySoSerious 2013-10-18 03:50:19
这正是我尝试的,但它说:属性或索引'System.Windows.Forms.KeyPressEventArgs.KeyChar'不能被分配给 - 它是只读的 – 2016-01-19 03:46:44
在这里尝试这样的实现。
public MainForm()
{
InitializeComponent();
InitializeUpperCaseTextBox();
}
private void InitializeUpperCaseTextBox()
{
txtbox.CharacterCasing = CharacterCasing.Upper;
//... etc.
}
我同意。我没有想到他们可能会将光标置于单词中间的情况。 – Reena 2010-04-19 17:42:50
对于未来的编辑者,用Windows的说法,光标是屏幕上代表鼠标的图形图像。插入符号是用于输入文本的闪烁条/对象。 – 2014-10-03 20:51:23