Mise en évidence des étiquettes Windows Forms

Existe-t-il un moyen de mettre en évidence un libellé sur un formulaire Windows .NET afin de permettre la copie du texte. J’ai tenté de le faire avec une zone de texte conçue pour ressembler à une étiquette, mais cela se traduit par un curseur clignotant.

Je pense que c’est assez proche:

textBox.BackColor = System.Drawing.SystemColors.Control; textBox.BorderStyle = System.Windows.Forms.BorderStyle.None; textBox.ReadOnly = true; textBox.Text = "This is selectable text"; textBox.MouseUp += new MouseEventHandler( delegate(object sender, MouseEventArgs e) { HideCaret((sender as Control).Handle); }); [DllImport("User32.dll")] static extern Boolean HideCaret(IntPtr hWnd); 

Et si vous en avez besoin pour parcourir plusieurs lignes:

 textBox.Multiline = true; 

Si vous voulez que ce soit un contrôle prévisible, fiable et standard avec tout le clavier et la prise en charge des raccourcis, vous avez simplement besoin d’une zone de texte. Et puis le curseur clignotant est une fonctionnalité utile, pourquoi la combattre?

Il n’est pas rare qu’un texte statique sélectionnable affiche un curseur clignotant. Si vous obtenez les propriétés d’un fichier dans l’Explorateur Windows et sélectionnez des données dans cette fenêtre, vous verrez également un curseur clignotant.

Je l’ai déjà fait, il y a quelques années, je pense avoir utilisé cet appel Win API (mais avec une zone de texte normale): http://www.dreamincode.net/forums/showtopic35107.htm

Vous avez la fonction HideCaret dans User32.dll. Utilisez-le comme ceci:

 [DllImport("User32.dll")] static extern bool HideCaret(IntPtr hWnd); private void textBox_Enter(object sender, EventArgs e) { HideCaret(textBox.Handle); } 

Cela empêchera le curseur d’afficher lorsque la zone de texte a le focus.

Une chose à considérer est d’aller de l’avant et d’utiliser une étiquette, mais ensuite de copier par programme le contenu (le texte de l’étiquette) dans le presse-papier en utilisant:

 Clipboard.SetText(yourLabel.Text);