it-swarm.asia

Windows form etiketinde metin seçmek mümkün mü?

Bir Windows Form etiket kontrolünde metnin bir bölümünü vurgulamak/seçmek mümkün müdür? RTFtextbox kontrolü ile mümkün olduğunu biliyorum, ancak bu kontrolü kullanmanın, etiketin birçok örneğini oluşturmam gerektiğinden fazla önemsemeyeceğini biliyorum.

47
tunafish24

Windows form etiketinde metin seçmek mümkün mü? - NO (Label.Paint yöntemini geçersiz kılmadan en azından kolay bir yol değil)

Bir TextBox'u bu amaç için kolayca değiştirebilirsiniz.

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

İnanmıyorum işte sana bir örnek.

enter image description here

79
CharithJ

Beğen Bala R yanıtladı: 

"BorderStyle, Yok olarak ayarlanmış ve Salt Okunur olarak true Ve Backcolor olarak ayarlanmış bir TextBox kullanın.

Metin dizesi çok uzunsa ve Width öğesinin TextBox değeri tüm metni görüntülemek için yeterli değilse, Width öğesinin TextBox özelliğini tüm Metinleri görüntülemek için ayarlayabilirsiniz. 

Width için doğru sayıyı bilmeniz gerekiyorsa, bunun için MeasureStringGraphics yöntemini kullanabilirsiniz. Örneği Control öğesinin CreateGraphics() yönteminden alabilirsiniz (bu durumda TextBox). 

İlk parametre TextBox'un Metni ve ikinci parametre TextBox'un Fontu'dur. Bu işlev SizeF struct değerini döndürür. Bunun yalnızca Genişlik özelliğine ihtiyacınız var, onu (int)size.Width veya (int)Math.Round(size.Width) ile tamsayıya dönüştürün. 

Bundan sonra grafik örneğinin Dispose() yöntemini çağırmayı unutmayın, çünkü artık ihtiyacınız olmayacak.


Tüm bu işlemleri yapacak kendi fonksiyonunuzu yazabilirsiniz:

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

Hayır, Windows Form Etiketi'nde metin seçmek mümkün değildir. Bunun için bunun yerine salt okunur bir metin kutusu kullanabilirsiniz.

7
Amry

Kabınki ile eşleşecek şekilde TextBox ve BorderStyle olarak ayarlanan None ve Readonly ve Backcolor olarak ayarlanan true kullanın.

5
Bala R

Bir etiketteki metnin bir kısmını vurgulayamazsınız. Ancak, bu etiketlerin metni statikse, bir görüntü kullanabilir ve Label.Image özelliğine ayarlayabilirsiniz. 

3
gjohn

Bu sorunun etiket metninin kısımlarını seçmekle ilgili olduğunu biliyorum, ancak sonuçta metnin panoya yerleştirileceğini varsayıyorum.

Bu yüzden, metnin tamamını kopyalamayı düşünmüyorsanız, metnini panoya kopyalamak için etikette bir Click olayı ayarlayın:

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

// ...

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

Bir etikete çift tıklamak metni panoya kopyalar. Bu, Windows Forms etiketlerinin varsayılan davranışıdır.

0
vmil