Comment mettre en évidence automatiquement le texte dans un contrôle de zone de texte lorsque le contrôle devient actif.
Dans Windows Forms et WPF:
textbox.SelectionStart = 0;
textbox.SelectionLength = textbox.Text.Length;
En asp.net:
textBox.Attributes.Add("onfocus","this.select();");
Si vous souhaitez le faire pour l’ensemble de votre application WPF, vous pouvez procéder comme suit: - Dans le fichier 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();
}
Si vous souhaitez que le texte de la zone de texte soit mis en surbrillance par un clic de souris, vous pouvez le simplifier en ajoutant:
this.textBox1.Click += new System.EventHandler(textBox1_Click);
dans:
partial class Form1
{
private void InitializeComponent()
{
}
}
où textBox1 est le nom de la zone de texte pertinente située dans Form1
Et créez ensuite la définition de la méthode:
void textBox1_Click(object sender, System.EventArgs e)
{
textBox1.SelectAll();
}
dans:
public partial class Form1 : Form
{
}
Il est très facile à réaliser avec la méthode intégrée SelectAll
Vous pouvez simplement écrire ceci:
txtTextBox.Focus();
txtTextBox.SelectAll();
Et tout dans textBox sera sélectionné :)
Je pense que le moyen le plus simple est d’utiliser TextBox.SelectAll
comme dans un événement Enter:
private void TextBox_Enter(object sender, EventArgs e)
{
((TextBox)sender).SelectAll();
}
Voici le code que j'ai utilisé. Vous devez ajouter la propriété jointe à chaque zone de texte que vous souhaitez sélectionner automatiquement. Voyant que je ne voulais pas que tous les champs de texte de mon application fassent cela, c'était la meilleure solution pour moi.
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;
}
}
}
Le principal changement que j'ai apporté ici a été d'ajouter un événement chargé à de nombreux exemples que j'ai vus. Cela permet au code de continuer à fonctionner après son déchargement (c.-à-d. Qu'un onglet est modifié). De plus, j'ai inclus du code pour m'assurer que le texte est sélectionné si vous cliquez sur la zone de texte avec la souris, et pas seulement le focus clavier. Remarque: si vous cliquez réellement sur le texte dans la zone de texte, le curseur est inséré comme il se doit entre les lettres.
Vous pouvez l'utiliser en incluant la balise suivante dans votre xaml.
<TextBox
Text="{Binding Property}"
Library:AutoSelectAll.IsEnabled="True" />
Si vous devez le faire pour un grand nombre de zones de texte (dans Silverlight ou WPF), vous pouvez utiliser la technique utilisée dans le message de blog: http://dnchannel.blogspot.com/2010/01/silverlight-3 -auto-select-text-in.html . Il utilise les propriétés attachées et les événements routés.
Pour les événements "Entrée" (par exemple: appuyez sur la touche Tab) ou "Premier clic", tout le texte sera sélectionné. 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;
}
}
}
Sous forme de fenêtre c #. Si vous utilisez Enter event, cela ne fonctionnera pas. essayez d'utiliser l'événement 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;
}
Je ne sais pas pourquoi personne n'en a parlé mais tu peux aussi faire ça, ça marche pour moi
textbox.Select(0, textbox.Text.Length)
Tu peux utiliser ça, chiche. :RÉ
TextBox1.Focus();
TextBox1.Select(0, TextBox1.Text.Length);
Si vous voulez sélectionner tout le texte uniquement lorsque l'utilisateur clique pour la première fois dans la zone, puis les laisser cliquer au milieu du texte s'ils le souhaitent, c'est le code que j'ai finalement utilisé.
La gestion de l'événement FocusEnter
ne fonctionne pas, car l'événement Click
survient après et remplace la sélection si vous SelectAll()
dans l'événement 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;
}
textBoxX1.Focus();
this.ActiveControl = textBoxX1;
textBoxX1.SelectAll();