自动突出显示文本框控件中的文本

时间:2010-01-28 00:21:14

标签: c# textbox

当控件获得焦点时,如何在文本框控件中自动突出显示文本。

16 个答案:

答案 0 :(得分:50)

在Windows窗体和WPF中:

textbox.SelectionStart = 0;
textbox.SelectionLength = textbox.Text.Length;

答案 1 :(得分:9)

在asp.net中:

textBox.Attributes.Add("onfocus","this.select();");

答案 2 :(得分:9)

如果您想为整个WPF应用程序执行此操作,可以执行以下操作: - 在App.xaml.cs文件中

    protected override void OnStartup(StartupEventArgs e)
    {
        //works for tab into textbox
        EventManager.RegisterClassHandler(typeof(TextBox),
            TextBox.GotFocusEvent,
            new RoutedEventHandler(TextBox_GotFocus));
        //works for click textbox
        EventManager.RegisterClassHandler(typeof(Window),
            Window.GotMouseCaptureEvent,
            new RoutedEventHandler(Window_MouseCapture));

        base.OnStartup(e);
    }
    private void TextBox_GotFocus(object sender, RoutedEventArgs e)
    {
        (sender as TextBox).SelectAll();
    }

    private void Window_MouseCapture(object sender, RoutedEventArgs e)
    {
        var textBox = e.OriginalSource as TextBox;
        if (textBox != null)
             textBox.SelectAll(); 
    }

答案 3 :(得分:5)

如果您打算通过鼠标单击突出显示文本框中的文本,可以通过添加以下内容来简化:

this.textBox1.Click += new System.EventHandler(textBox1_Click);

在:

partial class Form1
{
    private void InitializeComponent()
    {

    }
}

其中textBox1是位于Form1

中的相关文本框的名称

然后创建方法定义:

void textBox1_Click(object sender, System.EventArgs e)
{
    textBox1.SelectAll();
}

在:

public partial class Form1 : Form
{

}

答案 4 :(得分:4)

使用内置方法SelectAll

可以很容易地实现

简单地说就可以写下:

txtTextBox.Focus();
txtTextBox.SelectAll();

将选择textBox中的所有内容:)

答案 5 :(得分:3)

我认为最简单的方法是在Enter事件中使用TextBox.SelectAll

private void TextBox_Enter(object sender, EventArgs e)
{
    ((TextBox)sender).SelectAll();
}

答案 6 :(得分:2)

这是我一直在使用的代码。它需要将附加属性添加到您希望自动选择的每个文本框中。因为我不希望我的应用程序中的每个文本框都这样做,这对我来说是最好的解决方案。

public class AutoSelectAll
{
    public static bool GetIsEnabled(DependencyObject obj) 
    { 
        return (bool)obj.GetValue(IsEnabledProperty); 
    } 
    public static void SetIsEnabled(DependencyObject obj, bool value) 
    { 
        obj.SetValue(IsEnabledProperty, value);
    }

    static void ue_Loaded(object sender, RoutedEventArgs e)
    {
        var ue = sender as FrameworkElement;
        if (ue == null)
            return;
        ue.GotFocus += ue_GotFocus;
        ue.GotMouseCapture += ue_GotMouseCapture;
    }

    private static void ue_Unloaded(object sender, RoutedEventArgs e)
    {
        var ue = sender as FrameworkElement;
        if (ue == null)
            return;
        //ue.Unloaded -= ue_Unloaded;
        ue.GotFocus -= ue_GotFocus;
        ue.GotMouseCapture -= ue_GotMouseCapture;
    }

    static void ue_GotFocus(object sender, RoutedEventArgs e)
    {
        if (sender is TextBox)
        {
            (sender as TextBox).SelectAll();
        }
        e.Handled = true;
    }

    static void ue_GotMouseCapture(object sender, MouseEventArgs e)
    {
        if (sender is TextBox)
        {
            (sender as TextBox).SelectAll();
        }
        e.Handled = true;
    }

    public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool),
        typeof(AutoSelectAll), new UIPropertyMetadata(false, IsEnabledChanged));

    static void IsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var ue = d as FrameworkElement;
        if (ue == null)
            return;
        if ((bool)e.NewValue)
        {
            ue.Unloaded += ue_Unloaded;
            ue.Loaded += ue_Loaded;
        }
    }
} 

我在这里做的主要改变是为我见过的许多例子添加了一个加载的事件。这允许代码在卸载后继续工作(即更改选项卡)。此外,我还包括代码,以确保在使用鼠标单击文本框时选中文本,而不仅仅是键盘对焦。注意:如果您实际单击文本框中的文本,则光标将插入字母之间。

您可以通过在xaml中包含以下标记来使用此功能。

<TextBox  
    Text="{Binding Property}"
    Library:AutoSelectAll.IsEnabled="True" />

答案 7 :(得分:1)

如果您需要为大量文本框(在Silverlight或WPF中)执行此操作,则可以使用博客文章中使用的技术:http://dnchannel.blogspot.com/2010/01/silverlight-3-auto-select-text-in.html。它使用附加属性和路由事件。

答案 8 :(得分:1)

如果您只想在用户第一次点击框中时选择所有文本,然后让他们在文本中间单击,如果他们需要,这就是我最终使用的代码。

仅处理FocusEnter事件不起作用,因为Click事件之后会发生,如果您在Focus事件中SelectAll(),则会覆盖选择。

private bool isFirstTimeEntering;
private void textBox_Enter(object sender, EventArgs e)
{
    isFirstTimeEntering = true;
}

private void textBox_Click(object sender, EventArgs e)
{
    switch (isFirstTimeEntering)
    {
        case true:
            isFirstTimeEntering = false;
            break;
        case false:
            return;
    }

    textBox.SelectAll();
    textBox.SelectionStart = 0;
    textBox.SelectionLength = textBox.Text.Length;
}

答案 9 :(得分:0)

On events "Enter" (for example: press Tab key) or "First Click" all text will be selected. dotNET 4.0

public abstract class WakeLockHelper {

    private static PowerManager.WakeLock wakeLock;

    private static String wakelockTag = "my.random.tag.4413";

    public static void acquire(Context context) {
        if (wakeLock != null) {
            wakeLock.release();
        }

        PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, wakelockTag);
        wakeLock.acquire();
    }

    public static void release() {
        if (wakeLock != null) {
            wakeLock.release();
        }
        wakeLock = null;
    }
}

答案 10 :(得分:0)

我不知道为什么没有人提到这一点,但你也可以这样做,它对我有用

textbox.Select(0, textbox.Text.Length)

答案 11 :(得分:0)

你可以使用这个,简洁。 :d

TextBox1.Focus();    
TextBox1.Select(0, TextBox1.Text.Length);

答案 12 :(得分:0)

 textBoxX1.Focus();
 this.ActiveControl = textBoxX1;
 textBoxX1.SelectAll();

答案 13 :(得分:0)

以窗口形式c#。如果使用Enter事件,它将无法正常工作。尝试使用MouseUp事件

    bool FlagEntered;
    private void textBox1_MouseUp(object sender, MouseEventArgs e)
    {
        if ((sender as TextBox).SelectedText == "" && !FlagEntered)
        {
            (sender as TextBox).SelectAll();
            FlagEntered = true;
        }
    }

    private void textBox1_Leave(object sender, EventArgs e)
    {
        FlagEntered = false;
    }

答案 14 :(得分:0)

如果您想在“ On_Enter事件”上全选,则无济于事。 尝试使用“点击事件”

    private void textBox_Click(object sender, EventArgs e)
    {
        textBox.Focus();
        textBox.SelectAll();
    }

答案 15 :(得分:-1)

textbox.Focus();
textbox.SelectionStart = 0;
textbox.SelectionLength = textbox.Text.Length;