Evidenzia automaticamente il testo in un controllo casella di testo

Come si evidenzia automaticamente il testo in un controllo casella di testo quando il controllo ottiene la messa a fuoco.

In Windows Form e WPF:

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

In asp.net:

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

Se vuoi farlo per l’intera applicazione WPF puoi fare quanto segue: – Nel file 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(); } 

Se la tua intenzione è quella di ottenere il testo nella casella di testo evidenziata con un clic del mouse, puoi renderlo semplice aggiungendo:

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

in:

 partial class Form1 { private void InitializeComponent() { } } 

dove textBox1 è il nome della casella di testo relativa che si trova in Form1

E quindi creare la definizione del metodo:

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

in:

 public partial class Form1 : Form { } 

Penso che il modo più semplice sia usare TextBox.SelectAll come in un evento Enter:

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

Ecco il codice che ho usato. Richiede l’aggiunta della proprietà associata a ciascuna casella di testo che si desidera selezionare automaticamente. Visto che non voglio che ogni casella di testo della mia applicazione faccia questo, questa è stata la soluzione migliore per me.

 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; } } } 

Il principale cambiamento che ho apportato qui è stato l’aggiunta di un evento caricato a molti degli esempi che ho visto. Ciò consente al codice di continuare a funzionare dopo che è stato scaricato (ad esempio, una scheda è cambiata). Inoltre ho incluso il codice per assicurarmi che il testo venga selezionato se clicchi sulla casella di testo con il mouse, e non solo sulla tastiera. Nota: se si fa effettivamente clic sul testo nella casella di testo, il cursore viene inserito tra le lettere come dovrebbe.

Puoi usare questo includendo il seguente tag nel tuo xaml.

  

È molto facile da ottenere con il metodo SelectAll

Semplicemente può scrivere questo:

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

E tutto verrà selezionato in textBox 🙂

Se è necessario eseguire questa operazione per un numero elevato di caselle di testo (in Silverlight o WPF), è ansible utilizzare la tecnica utilizzata nel post del blog: http://dnchannel.blogspot.com/2010/01/silverlight-3-auto -select-text-in.html . Usa Proprietà allegate e Eventi instradati.

Per gli eventi “Invio” (ad esempio: premere il tasto Tab) o “Primo clic” verrà selezionato tutto il testo. 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; } } } 

Non so perché nessuno l’abbia menzionato, ma puoi anche farlo, funziona per me

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

Puoi usare questo, conciso. : D

 TextBox1.Focus(); TextBox1.Select(0, TextBox1.Text.Length); 
  textBoxX1.Focus(); this.ActiveControl = textBoxX1; textBoxX1.SelectAll(); 

Se si desidera selezionare solo tutto il testo quando l’utente fa prima clic nella casella, quindi lasciare che facciano clic nel mezzo del testo, se lo desiderano, questo è il codice che ho utilizzato.

La semplice gestione dell’evento FocusEnter non funziona, perché l’evento Click viene in seguito e sostituisce la selezione se si seleziona SelectAll() nell’evento Focus.

 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; } 

In forma di finestra c #. Se usi l’evento Enter, non funzionerà. prova a utilizzare l’evento 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; } 
 textbox.Focus(); textbox.SelectionStart = 0; textbox.SelectionLength = textbox.Text.Length;