web-dev-qa-db-de.com

Kann ich Text auf einem Windows-Formularetikett auswählen?

Kann ein Teil eines Textes in einem Windows Form-Steuerelement markiert/ausgewählt werden? Ich weiß, dass es mit dem RTFtextbox-Steuerelement möglich ist. Die Verwendung dieses Steuerelements wäre jedoch übertrieben, da ich viele Instanzen des Labels erstellen muss.

47
tunafish24

Kann ich Text auf einem Windows-Formularetikett auswählen? - NEIN (Zumindest kein einfacher Weg, ohne die Label.Paint-Methode zu überschreiben)

Sie können ein TextBox für diesen Zweck leicht ändern.

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

Glaube nicht Hier ist ein Beispiel für Sie.

enter image description here

79
CharithJ

Like Bala R antwortete: 

Msgstr "Verwenden Sie ein TextBox mit BorderStyle, das auf None und Readonly auf true Und Backcolor gesetzt ist, um dem Container zu entsprechen.".

Wenn die Textzeichenfolge sehr lang ist und die Variable Width der Variablen TextBox nicht ausreicht, um den gesamten Text anzuzeigen, können Sie die Eigenschaft Width der Variable TextBox so einstellen, dass der gesamte Text angezeigt wird. 

Wenn Sie die korrekte Nummer für Width kennen müssen, können Sie hierfür die MeasureString-Methode von Graphics verwenden. Sie können die Instanz von der CreateGraphics()-Methode der Control (in diesem Fall TextBox) erhalten. 

Der erste Parameter ist der Text von TextBox und der zweite Parameter ist die Schriftart von TextBox. Diese Funktion gibt SizeF struct zurück. Sie benötigen nur die Width-Eigenschaft, konvertieren Sie sie mit (int)size.Width oder (int)Math.Round(size.Width) in eine Ganzzahl. 

Vergessen Sie nicht, die Dispose()-Methode der Grafikinstanz danach aufzurufen, da Sie sie nicht mehr benötigen.


Sie können Ihre eigene Funktion schreiben, die all diesen Prozess erledigt:

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

Nein, es ist nicht möglich, Text auf der Windows Form-Beschriftung auszuwählen. Sie können stattdessen ein schreibgeschütztes Textfeld dafür verwenden.

7
Amry

Verwenden Sie eine TextBox mit BorderStyle, die auf None gesetzt ist, und Readonly auf true und auf Backcolor gesetzt ist, um der des Containers zu entsprechen.

5
Bala R

Sie können einen Teil des Textes auf einem Etikett nicht markieren. Sie können jedoch ein Bild verwenden und es auf die Label.Image-Eigenschaft setzen, wenn der Text für diese Beschriftungen statisch ist. 

3
gjohn

Ich weiß, dass es sich bei dieser Frage um die Auswahl von Teilen des Texts eines Labels handelt, aber ich gehe davon aus, dass der Text letztendlich in der Zwischenablage platziert werden soll.

Wenn Sie also nichts dagegen haben, den gesamten Text zu kopieren, setzen Sie einfach ein Click -Ereignis auf das Etikett, um dessen Text in die Zwischenablage zu kopieren:

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

// ...

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

Ein Doppelklick auf ein Etikett kopiert den Text in die Zwischenablage. Dies ist jetzt das Standardverhalten von Windows Forms-Beschriftungen.

0
vmil