如何禁用TextBox上的选择

时间:2011-09-14 17:48:55

标签: c# winforms textbox selection

我想禁用选择文本并在TextBox中单击文本中间,但是用户必须能够输入此TextBox并在早期文本的末尾写入,因此我无法将其设为ReadOnlyEnable = false

我尝试处理MouseDown并执行以下操作:

input.Select(input.Text.Length, 0);

它有助于将光标放在文本的中间,但用户仍然可以从最后进行选择。

我还在MessageBox()事件上发了MouseDown,但在这种情况下,用户无法点击textBox并写任何内容。

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

我该怎么做?

3 个答案:

答案 0 :(得分:5)

Click事件

的情况如何?

修改:对DoubleClickMouseLeave执行同样的操作以涵盖所有情况。您可以拥有一个公共事件处理程序。

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

答案 1 :(得分:2)

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

这种方法不仅可以说更加用户友好 - 可编辑的框是完全可编辑的而不仅仅是“可附加的”,当用户点击Backspace时会让人感到困惑 - 但是也需要更少的框架战斗来让框架做什么你需要。

答案 2 :(得分:1)

使用MouseDown事件处理程序并不遥远,但最好抓住MouseUp,因为这是在完成选择后将触发的事件。

或者,您可以捕获SelectionChanged事件。

请把你的:

input.Select(input.Text.Length,0);

任何这些事件处理程序中的代码。