【问题标题】:.NET - WinForm Textboxes - Focus and SelectedText.NET - WinForm 文本框 - 焦点和 SelectedText
【发布时间】:2010-11-26 14:19:22
【问题描述】:

每当我将焦点设置到 WinForms (.NET 3.5) 中的文本框时,都会选择整个文本。如果我将 MultiLine 设置为 true 或 false,则无关紧要。似乎与该用户所看到的完全相反: Making a WinForms TextBox behave like your browser's address bar

我已经尝试过:

    private void Editor_Load(object sender, EventArgs e)
    {
       //form load event
       txtName.SelectedText = String.Empty; // has no effect
    }

我可以设置其他属性来阻止这种烦人的行为吗?

我刚刚注意到这是可行的:

        txtName.Select(0,0);
        txtScript.Select(0,0);

但我真的需要在所有文本框上调用 select() 吗?

【问题讨论】:

  • 见凯尔·罗森多的 cmets。

标签: .net winforms textbox


【解决方案1】:

创建一个覆盖 Enter 事件的自定义 TextBox 控件。

类似这样的:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace YourNamespace  
{
    class MyTextBox : TextBox
    {

        protected override void OnEnter(EventArgs e) {
            this.Select(0, 0);

            base.OnEnter(e);
        }

    }
}

【讨论】:

  • 一切都很好,但并没有解决原来的问题。
  • 当我读到问题时,问题是要防止许多文本框在输入时选择所有文本。我的解决方案确实解决了这个问题,而无需大量跳圈。 (确实,OP 的代码中可能有其他内容使我的解决方案无法运行,但我认为值得考虑)。
【解决方案2】:

好吧,如果你使用Select(0,0),你就不需要使用Focus(),所以我看不出问题吗?它仍然以单个调用结束。

【讨论】:

  • 我认为这只会发生在我身上,因为我在绘制控件之前设置了 TextBox.Text 值。不管我是通过方法还是属性来做。难怪我以前没有注意到这一点。
  • 我可以利用什么表单事件来确保在表单绘制事件之后设置我的文本框值?
  • 啊,我明白了。您何时在构造函数或加载事件中设置文本框?如果是构造函数,那就是你的问题。
  • 我认为它只是预先可见。我已经在构造函数之外和属性(方法)之外尝试过它。如果我在表单可见(显示)之前调用这两种方法,它就会有这种奇怪的行为。如果我等待并在之后调用这两种方法,那很好。很奇怪。
  • 在这种情况下,尝试在 Windows ContentRendered 事件中初始化文本框。此事件仅在绘制完所有内容后才会触发,因此本质上,如果问题如您所想,它就会解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多