Come si evidenzia automaticamente il testo in un controllo casella di testo quando il controllo ottiene la messa a fuoco.Testo evidenziato automatico in un controllo casella di testo
risposta
in Windows Form e WPF:
textbox.SelectionStart = 0;
textbox.SelectionLength = textbox.Text.Length;
in asp.net:
textBox.Attributes.Add("onfocus","this.select();");
Se avete bisogno di fare questo per un gran numero di caselle di testo (in Silverlight o WPF), allora si può 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.
Se si vuole farlo per tutta la vostra applicazione WPF è possibile effettuare le seguenti operazioni: - 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();
}
Lavorato per l'inserimento di schede in un controllo TextBox. Non ha funzionato così bene per fare clic in uno. Se si fa clic sul testo, esso viene rapidamente evidenziato e quindi non evidenziato prima di essere visualizzato come ci si aspetterebbe dal cursore nella posizione selezionata. – denver
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.
È possibile utilizzare questo includendo il seguente tag in xaml.
<TextBox
Text="{Binding Property}"
Library:AutoSelectAll.IsEnabled="True" />
Se la vostra intenzione è quella di ottenere il testo nella casella di testo evidenziato in un clic del mouse è possibile rendere semplice con l'aggiunta di:
this.textBox1.Click += new System.EventHandler(textBox1_Click);
in:
partial class Form1
{
private void InitializeComponent()
{
}
}
dove textBox1 è il nome della casella di testo rilevante 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 sta usando TextBox.SelectAll
come in un Inserisci evento:
private void TextBox_Enter(object sender, EventArgs e)
{
((TextBox)sender).SelectAll();
}
On eventi "Enter" (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 il motivo per cui nessuno ha menzionato che, ma si può anche fare questo, per me funziona
textbox.Select(0, textbox.Text.Length)
È possibile utilizzare questo, concisa.: D
TextBox1.Focus();
TextBox1.Select(0, TextBox1.Text.Length);
E 'molto facile da raggiungere con costruito nel metodo SelectAll
Semplicemente cou può scrivere questo:
txtTextBox.Focus();
txtTextBox.SelectAll();
E tutto in casella di testo sarà selezionato :)
textbox.Focus();
textbox.SelectionStart = 0;
textbox.SelectionLength = textbox.Text.Length;
Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo su come e/o perché risolve il problema migliorerebbe il valore a lungo termine della risposta. Si prega di leggere questo https://stackoverflow.com/help/how-to-answer –
textBoxX1.Focus();
this.ActiveControl = textBoxX1;
textBoxX1.SelectAll();
http://msdn.microsoft.com/en-u s/library/hk09zy8f.aspx –