是否可以强制Windows窗体应用程序中的文本框以“覆盖模式”工作,即在用户键入而不是添加时替换字符?
否则,有没有一种标准的方式来获得这种行为?如何将WinForms文本框设置为覆盖模式
3
A
回答
10
尝试使用MaskedTextBox并将InsertKeyMode设置为InsertKeyMode.Overwrite。
MaskedTextBox box = ...;
box.InsertKeyMode = InsertKeyMode.Overwrite;
2
标准的方式是,你在文本框中的土地,那么当用户键入它会自动替换现有文本
1
选择现有的文本如果你不希望使用屏蔽文本框你可以在处理KeyPress事件时执行此操作。
private void Box_KeyPress(object sender, KeyPressEventArgs e)
{
TextBox Box = (sender as TextBox);
if (Box.SelectionStart < Box.TextLength && !Char.IsControl(e.KeyChar))
{
int CacheSelectionStart = Box.SelectionStart; //Cache SelectionStart as its reset when the Text property of the TextBox is set.
StringBuilder sb = new StringBuilder(Box.Text); //Create a StringBuilder as Strings are immutable
sb[Box.SelectionStart] = e.KeyChar; //Add the pressed key at the right position
Box.Text = sb.ToString(); //SelectionStart is reset after setting the text, so restore it
Box.SelectionStart = CacheSelectionStart + 1; //Advance to the next char
}
}
0
此代码似乎有错误。我发现你需要在Keypress事件中设置e.Handled,否则插入两次。这里是我的代码(VB)基于以上: -
Private Sub txtScreen_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtScreen.KeyPress
If txtScreen.SelectionStart < txtScreen.TextLength AndAlso Not [Char].IsControl(e.KeyChar) Then
Dim SaveSelectionStart As Integer = txtScreen.SelectionStart
Dim sb As New StringBuilder(txtScreen.Text)
sb(txtScreen.SelectionStart) = e.KeyChar
'Add the pressed key at the right position
txtScreen.Text = sb.ToString()
'SelectionStart is reset after setting the text, so restore it
'Advance to the next char
txtScreen.SelectionStart = SaveSelectionStart + 1
e.Handled = True
End If
End Sub
-2
不知道是否使用KeyPress事件打乱了正常的改写过程中,也可能被特定检查按键响应之内的东西,但这不是相当于一个正常的Windows文本框应该如何表现,因为当你开始用突出显示的文本输入一个控件时,应该删除该选择,以便输入该空的空格。有一次,我看到了如果声明,我意识到我一直在寻找在完成这样的行为:
If tb.SelectionStart < tb.TextLength AndAlso Not [Char].IsControl(e.KeyChar) Then
tb.SelectedText = ""
End If
不知道你为什么会想保留的选择,但前面的代码是理想的,如果这就是你需要
Sal
0
您可以使用RichTextBox
而不是TextBox
。
相关问题
- 1. 如何设置格式文本中的文本框在的WinForms
- 2. WinForms覆盖控制框
- 3. 如何将文本格式设置为######。##
- 4. 如何覆盖文本框的ShortcutsEnabled
- 5. jQuery的:设置模式对话框覆盖颜色
- 6. 如何将位置设置为自定义贴图覆盖
- 7. 如何设置覆盖网络模式的Docker Swarm集群
- 8. Silverlight文本框覆盖
- 9. 如何在编辑模式下将文本设置为XamComboEditor
- 10. 如何将DataTrigger设置为文本框“文本”属性?
- 11. 如何设置格式文本框?
- 12. 覆盖文本框的文本属性
- 13. 如何从覆盖文本
- 14. 将文本框设置为文件名
- 15. 如何从bootstrap覆盖img-width?将CSS规则设置为空?
- 16. 如何覆盖Spring @Autowire注解并将字段设置为null?
- 17. 如何将Apache ProxyPass设置为覆盖父ProxyPass的子目录?
- 18. 覆盖WinForms消息框控件
- 19. 设置SystemColors覆盖隐式样式
- 20. 如何覆盖emacs纯文本主模式的缩进功能?
- 21. 如何将FEATURE_BROWSER_EMULATION设置为IE8模式?
- 22. 如何将QInputDialog设置为模式
- 23. 如何将我的文本框设置为行而不是框?
- 24. 设置对话框覆盖Jquery
- 25. 防止JcomboBox的文本字段设置为覆盖
- 26. 如何启用覆盖文本框中的文本?
- 27. 覆盖nVidia的3D设置覆盖
- 28. “覆盖” php.ini设置
- 29. 覆盖App.Config设置
- 30. 如何在WinForms的文本框控件中设置垂直对齐方式?
这显然不是什么OP是要求,且已存在,证明它有效,接受和高度上投票的答案。 – 2014-05-04 15:01:24
,但并没有给我我正在寻找的东西 - 但这是Google给我的最好回应....意思是如果别人来找我想找的东西,并发现这篇文章他们的问题是解决 – halfacreSal 2014-05-04 16:13:04
我明白了,在你的回应后我几乎感觉不好。但在这种情况下,我会建议发布问答风格问题。发布一个新问题,并在同一时间用这个答案回答。使标题完全符合你在google搜索的内容,然后你就可以开始了。您可能会发现其他人已经找到了替代方法,并且人们非常感谢您的信息并据此投票。 – 2014-05-04 23:49:39