C# 如何将WinForms Textbox设置为覆盖模式

C# 如何将WinForms Textbox设置为覆盖模式,c#,winforms,textbox,C#,Winforms,Textbox,是否可以强制windows窗体应用程序中的文本框在“覆盖模式”下工作,即在用户键入而不是添加字符时替换字符? 否则,是否有一种标准方法来获取此行为?尝试使用MaskedTextBox并将InsertKeyMode设置为InsertKeyMode.Overwrite MaskedTextBox box = ...; box.InsertKeyMode = InsertKeyMode.Overwrite; 标准的方法是,在您进入文本框时选择现有文本,然后在用户键入时,它将自动替换现有文本。如果您不

是否可以强制windows窗体应用程序中的文本框在“覆盖模式”下工作,即在用户键入而不是添加字符时替换字符?

否则,是否有一种标准方法来获取此行为?

尝试使用MaskedTextBox并将InsertKeyMode设置为InsertKeyMode.Overwrite

MaskedTextBox box = ...;
box.InsertKeyMode = InsertKeyMode.Overwrite;

标准的方法是,在您进入文本框时选择现有文本,然后在用户键入时,它将自动替换现有文本。如果您不希望使用屏蔽文本框,则可以在处理按键事件时执行此操作

    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
        }
    }
private void Box\u按键(对象发送器,按键事件参数e)
{
TextBox=(发送者作为TextBox);
if(Box.SelectionStart
此代码似乎有错误。我发现您需要在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
Private Sub txtScreen_KeyPress(发送方作为对象,e作为KeyPressEventArgs)处理txtScreen.KeyPress
如果txtScreen.SelectionStart
不确定使用按键事件是否会扰乱正常的改写过程,或者可能会在按键中检查某些特定的内容,但这并不是正常的windows文本框的行为方式,因为当您开始在带有高亮显示文本的控件中键入时,应删除选择,允许您在空的空间中键入。当我看到If语句时,我意识到我所寻找的行为是通过以下方式实现的:

    If tb.SelectionStart < tb.TextLength AndAlso Not [Char].IsControl(e.KeyChar) Then
        tb.SelectedText = ""
    End If
如果tb.SelectionStart
不确定为什么要保留选择,但是如果您需要的话,前面的代码是理想的


Sal

您可以使用
RichTextBox
而不是
TextBox

资料来源:

这显然不是OP所要求的,已经有一个有效的、被接受的、投票率高的答案证明了这一点。但是,这并没有完全给出我想要的答案——但这是谷歌给我的最好回答。。。。也就是说,如果有人来找我要找的东西,发现这篇文章,他们的问题就解决了,我不明白,在你的回复后,我几乎对否决投票感到很难过。但在这种情况下,我建议发布一个问答式的问题。发布一个新问题,同时用这个答案回答。让标题与你在谷歌上搜索的内容一模一样,然后你就可以了。你可能会发现其他人已经找到了其他的方法来做这件事,人们真的很欣赏你的信息,并相应地提高投票率。好的-谢谢你的信息-我会尝试我的手在postingNice。我觉得这很有帮助。我用了这个(在转换成C之后)。。(你们知道这个问题被标记为C-)