【问题标题】:How to disable the selection on a TextBox如何禁用文本框上的选择
【发布时间】:2013-02-06 20:48:13
【问题描述】:

我想禁用选择文本并单击文本框中的文本中间,但用户必须能够输入此文本框并在早期文本的末尾写,所以我无法做到ReadOnly 或 @987654322 @。

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

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

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

我还在MouseDown 事件上创建了一个MessageBox(),但在这种情况下,用户无法单击文本框并编写任何内容。

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

我该怎么做?

【问题讨论】:

  • 第二个文本框只附加到第一个文本框?

标签: c# winforms textbox selection


【解决方案1】:

Click 事件怎么样

编辑:也对DoubleClickMouseLeave 执行相同操作以涵盖所有情况。您可以拥有一个通用的事件处理程序。

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

【讨论】:

  • 差不多。当MouseUp 选择消失时,用户仍然可以开始选择某些内容(蓝色突出显示)
  • MouseMove添加到清除选择的事件列表中
【解决方案2】:

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

这种方法不仅可以说对用户更友好——可编辑框是完全可编辑的,而不仅仅是“可附加”,当用户点击 Backspace 时会让人感到困惑——而且还需要更少的与框架的冲突来让框做你需要。

【讨论】:

    【解决方案3】:

    您的 MouseDown 事件处理程序离您不远了,但最好抓住 MouseUp,因为这是在他们完成选择后将触发的事件。

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

    只需输入您的:

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

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

    【讨论】:

    • winforms 没有SelectionChanged TextBox
    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多