2010-01-28 2 views

ответ

39

В Windows Forms и WPF:

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

Что делать, если вы хотите выбрать несколько слов, но не слова между ними? – f1wade

+1

@ f1wade Windows Forms TextBox не поддерживает это. –

+0

UDP: tetxbox..SelectAll() поддерживается в WPF для Windows Phone 8 (не тестировался в других типах проектов) – Epsil0neR

9

В asp.net:

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

Если вы хотите сделать это для всего приложения 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(); 
    } 
+1

Работает на табуляцию в TextBox. Не работает так хорошо, чтобы щелкнуть в одном. Если вы нажмете на текст, он быстро подсвечивается, а затем не подсвечивается перед отображением, как и следовало ожидать, с помощью курсора в месте щелчка. – denver

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" /> 
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 
{ 

} 
3

Я думаю, что самый простой способ использует TextBox.SelectAll как в Введите событие:

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

О событиях "Enter" (например: нажмите клавишу Tab) или «Первый щелчок» будет выбран весь текст. Dotnet 4,0

public static class TbHelper 
{ 
    // Method for use 
    public static void SelectAllTextOnEnter(TextBox Tb) 
    { 
     Tb.Enter += new EventHandler(Tb_Enter); 
     Tb.Click += new EventHandler(Tb_Click); 
    } 

    private static TextBox LastTb; 

    private static void Tb_Enter(object sender, EventArgs e) 
    { 
     var Tb = (TextBox)sender; 
     Tb.SelectAll(); 
     LastTb = Tb; 
    } 

    private static void Tb_Click(object sender, EventArgs e) 
    { 
     var Tb = (TextBox)sender; 
     if (LastTb == Tb) 
     { 
      Tb.SelectAll(); 
      LastTb = null; 
     } 
    } 
} 
0

Я не знаю, почему никто не упомянул, что, но вы также можете сделать это, это работает для меня

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

Вы можете использовать это, содержательный.: D

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

Это очень легко достичь с помощью встроенного в методе SelectAll

Просто Коу можно записать следующим образом:

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

И все в TextBox будет выбран :)

-1
textbox.Focus(); 
textbox.SelectionStart = 0; 
textbox.SelectionLength = textbox.Text.Length; 
+3

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и/или почему оно решает проблему, улучшит долгосрочную ценность ответа. Прочтите этот https://stackoverflow.com/help/how-to-answer –

0
textBoxX1.Focus(); 
this.ActiveControl = textBoxX1; 
textBoxX1.SelectAll(); 
Смежные вопросы