C# 如何禁用文本框上的选择

C# 如何禁用文本框上的选择,c#,winforms,textbox,selection,C#,Winforms,Textbox,Selection,我想禁用文本框中文本的选择和点击,但是用户必须能够输入这个文本框并在早期文本的结尾写入,所以我不能使它只读< /代码>或启用= false 我尝试处理MouseDown并执行以下操作: input.Select(input.Text.Length, 0); 这有助于将光标放置在文本的中间,但用户仍然可以从末尾做出选择。 我还在MouseDown事件上创建了一个MessageBox(),但在这种情况下,用户不能单击textBox并写入任何内容 最后一次尝试是在另一个控件中设置一个focus()

我想禁用文本框中文本的选择和点击,但是用户必须能够输入这个文本框并在早期文本的结尾写入,所以我不能使它<代码>只读< /代码>或<代码>启用= false 我尝试处理
MouseDown
并执行以下操作:

input.Select(input.Text.Length, 0);
<>这有助于将光标放置在文本的中间,但用户仍然可以从末尾做出选择。

我还在
MouseDown
事件上创建了一个
MessageBox()
,但在这种情况下,用户不能单击textBox并写入任何内容

最后一次尝试是在另一个控件中设置一个
focus()
,并在一段时间后重新聚焦,但根本不起作用。用户仍然可以进行选择


我该怎么做呢?

对于
点击
事件,这个怎么样

编辑:对
双击
鼠标移动
也执行相同操作,以覆盖所有情况。您可以有一个公共事件处理程序

    private void textBox1_Click(object sender, EventArgs e)
    {
        ((TextBox) sender).SelectionLength = 0;
    }

您的MouseDown事件处理程序离您不远,但捕获MouseUp可能更好,因为这是他们完成选择后将触发的事件

或者,您可以捕获SelectionChanged事件

只要把你的:

输入。选择(input.Text.Length,0)


在这些事件处理程序中进行编码。

如果它适合UI/用户模型,另一种方法是使用两个文本框:一个只读文本框,其中包含用户可以看到并执行操作的前一个文本(如果用户需要这样做),另一个可编辑文本框用于新文本以及将新文本提交到只读文本框的按钮(和持久层)


这种方法不仅可以说更方便用户,而且可编辑框完全可编辑,而不仅仅是“可附加的”,当用户点击Backspace时,这会让人感到困惑,但也需要较少的与框架的斗争,以使框满足您的需要。

几乎可以。当
鼠标悬停
选择消失时,用户仍然可以开始选择某些内容(蓝色高亮显示)将
MouseMove
添加到清除选择的事件列表winforms
TextBox
没有
SelectionChanged
。第二个文本框仅附加到第一个文本框?