.NET - WinForm文本框 - 焦点和选定文本

4
每当我在WinForms (.NET 3.5)中将焦点设置到文本框时,整个文本都会被选中。无论MultiLine设置为true还是false都没有影响。似乎与这位用户看到的完全相反: 使WinForms文本框的行为类似于浏览器地址栏 我已经尝试过:
    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()方法吗?


请查看对Kyle Rozendo的评论。 - BuddyJoe
2个回答

2
创建一个自定义的TextBox控件,覆盖Enter事件。类似这样:
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);
        }

    }
}

虽然做得很好,但它并没有解决原始问题。 - Kyle Rosendo
根据我所理解的问题,需要在输入时防止一系列文本框选中全部文本。我的解决方案能够轻松地解决这个问题,避免了繁琐的操作。(当然,原始代码中可能存在其他因素导致我的解决方案不可行,但我认为值得考虑)。 - Jay Riggs

0

如果您使用 Select(0,0),则不需要使用 Focus(),所以我不明白问题在哪里?它仍然会成为一个单一的调用。


我认为这只发生在我身上,因为我在控件绘制之前设置了TextBox.Text的值。无论我是通过方法还是属性来设置它都没有关系。难怪我以前没有注意到这一点。 - BuddyJoe
我可以利用哪个表单事件来确保在表单绘制事件之后设置文本框的值? - BuddyJoe
啊,我明白了。你是在构造函数还是加载事件中设置文本框?如果是在构造函数中设置的话,那就是问题所在了。 - Kyle Rosendo
我觉得这只是预先可见的问题。我已经在构造函数外部和属性(方法)外部尝试过了。如果在窗体可见(显示)之前调用这两个方法,它会出现奇怪的行为。如果等待并在之后调用这两个方法,就没问题了。奇怪。 - BuddyJoe
在这种情况下,尝试在Windows ContentRendered事件中初始化文本框。该事件只有在一切都已绘制完毕后才会触发,因此如果问题是你所想的那样,它将解决问题。 - Kyle Rosendo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接