web-dev-qa-db-fra.com

Est-il possible de sélectionner du texte sur une étiquette de formulaire Windows?

Est-il possible de surligner/sélectionner une partie du texte dans un contrôle d'étiquette Windows Form? Je sais que c'est possible avec le contrôle RTFtextbox, mais que l'utilisation de ce contrôle serait excessif car je dois créer de nombreuses instances de l'étiquette.

47
tunafish24

Est-il possible de sélectionner du texte sur une étiquette de formulaire Windows? - NON (du moins, pas facile sans passer par la méthode Label.Paint)

Vous pouvez facilement modifier une zone de texte à cette fin.

TextBox1.Text = "Hello, Select Me";
TextBox1.ReadOnly = true;
TextBox1.BorderStyle = 0;
TextBox1.BackColor = this.BackColor;
TextBox1.TabStop = false;

Ne crois pas? voici un exemple pour vous.

enter image description here

79
CharithJ

J'aime Bala R répondit: 

"Utilisez une zone de texte avec BorderStyle défini sur Aucun et en lecture seule sur true Et Backcolor pour correspondre à celui du conteneur.".

Si la chaîne de texte est très longue et que la Width de la TextBox ne suffit pas pour afficher tout le texte, vous pouvez définir la propriété Width de la TextBox pour afficher tout le texte. 

Si vous devez connaître le numéro correct pour Width, vous pouvez utiliser la méthode MeasureString de Graphics pour cela. Vous pouvez obtenir l'instance de la méthode CreateGraphics() de Control (TextBox dans ce cas). 

Le premier paramètre est le texte de TextBox et le deuxième paramètre est la police de TextBox. Cette fonction retourne SizeF struct. Vous n'avez besoin que de la propriété Width, convertissez-le en entier avec (int)size.Width ou (int)Math.Round(size.Width)

N'oubliez pas d'appeler la méthode Dispose() de l'instance graphique après, car vous n'en aurez plus besoin.


Vous pouvez écrire votre propre fonction qui fera tout ce processus:

static void SetText(TextBox textBox, string str)
{
   Graphics graphics = textBox.CreateGraphics();
   SizeF size = graphics.MeasureString(str, textBox.Font);
   graphics.Dispose();
   textBox.Width = (int)Math.Round(size.Width);
   textBox.Text = str;
}
12

Non, il n'est pas possible de sélectionner du texte sur l'étiquette de formulaire Windows. Vous pouvez utiliser à la place une zone de texte en lecture seule pour cela.

7
Amry

Utilisez une variable TextBox avec BorderStyle défini sur None et Readonly défini sur true et avec Backcolor correspondant à celui du conteneur.

5
Bala R

Vous ne pourrez pas surligner une partie du texte sur une étiquette. Toutefois, vous pouvez utiliser une image et la définir sur la propriété Label.Image si le texte de ces étiquettes est statique. 

3
gjohn

Je sais que cette question concerne la sélection de parties du texte d'une étiquette, mais je suppose que le texte doit finalement être placé dans le presse-papiers.

Donc, si cela ne vous dérange pas de copier le texte en entier, définissez un événement Click sur l'étiquette pour copier son texte dans le Presse-papiers:

myLabel.Click += new System.EventHandler(MyLabel_Click);

// ...

private void MyLabel_Click(object sender, EventArgs e)
{
   Clipboard.SetText(myLabel.Text);
}
0
Markus L

Double-cliquez sur une étiquette pour copier le texte dans le presse-papiers. C'est maintenant le comportement par défaut des étiquettes Windows Forms.

0
vmil