2011-10-13 13 views
41

Bir Windows Form etiket denetimindeki metnin bir bölümünü vurgulamak/seçmek mümkün mü? RTFtextbox kontrolüyle mümkün olduğunu biliyorum, ancak bu kontrolün kullanılması, etiketin birçok örneğini oluşturmam gerektiğinden aşırı olacaktı.Bir Windows form etiketinde metin seçmek mümkün mü?

+1

siz "select" ile neyi kastediyoruz:


Bütün bu süreci yapacağız kendi işlevini yazabilirim? Bu metni daha sonra kullanmak için kodla mı seçmelisiniz? – GianT971

+1

Üzgünüm @ John ... seçerek metin seçimini seçin örn. RichTextBox'ta, tüm metnin bir bölümünü seçmek/vurgulamak için "SelectedText" vb özelliklerini kullanabilirsiniz. Efekt, fareyle manuel olarak metin seçmek/vurgulamak gibidir. – tunafish24

+2

Sadece bir fikir: Etiketin türetilmiş bir sınıfını oluşturabilirsin, burada, seçilecek metnin başlangıç ​​ve bitiş indeksini saklamak için bazı özelliklerin var, daha sonra onPaint olayı üzerine yazarak bir yarı saydam dikdörtgenin çizim metnini vurgulamasını sağlayabilirsiniz – Marco

cevap

67

Bir Windows form etiketinde metin seçmek mümkün mü? - HAYIR (Label.Paint yöntemini geçersiz kılmadan en az kolay yolu yoktur)

Bu amaç için bir TextBox'ı kolaylıkla değiştirebilirsiniz.

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

Inanma? işte size bir örnek. Bala R gibi

enter image description here

+7

Karşılaşabileceğiniz sorun, metin kutusunun metnini dinamik olarak ayarlarsanız, etiketin aksine metin kutusundan daha genişse metni gizler. –

+2

@TheMuffinMan «WordWrap» özelliğini «true» olarak ayarlamanız gerekir. –

+1

Gerekirse, TextBox'un yüksekliğini değiştirebilmek için Multiline = True değerini de ayarlayabilirsiniz. –

7

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

5

kullan TextBoxtrue ve BackColor için ayarlanan None için ayarlanmış BorderStyle ile ve Readonly kabın eşleşecek şekilde.

3

Metnin bir bölümünü bir etikette vurgulayamazsınız. Ancak, bir resim kullanabilir ve bu etiketlerin metni statik ise Label.Image özelliğine ayarlayabilirsiniz.

+1

uygulamak gerçekten zor, ancak metin dinamik - bu yüzden bazılarını vurgulamak gerek. – tunafish24

11

cevap verdi:

"BorderStyle Yok olarak ayarlayın ve Readonly kabın eşleşecek şekilde doğru ve ArkaRenk olarak ayarlanmış olan bir TextBox kullanın.". Metin dizesi çok uzun olduğunu ve TextBox ait Width tüm metni görüntülemek için yeterli değilse

, o zaman Metin hepsi gösterilecek TextBox arasında Width özelliğini ayarlayabilirsiniz.

Width için doğru numarayı bilmeniz gerekiyorsa, bunun için Graphics numaralı MeasureString yöntemini kullanabilirsiniz. Örneğini Control (TextBox) 'da CreateGraphics() yönteminden alabilirsiniz.

İlk parametre TextBox'un Metni ve ikinci parametre TextBox'un Yazı Tipi'dür. Bu işlev SizeF yapısını döndürür. Sadece Genişlik özelliğine ihtiyacınız var, (int)size.Width veya (int)Math.Round(size.Width) ile tamsayıya dönüştürün.

Grafik örneğinin Dispose() yöntemini kullanmayı ihmal etmeyin, çünkü artık ihtiyacınız olmayacaktır.

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

Bu kodla yüksekliğini boyutlandırmak istediğiniz sabit genişlikte bir metin kutunuz varsa, şu soruya bakın: https://stackoverflow.com/questions/29299297/measure-text-height-wrapped-in-a- belirtilen genişlik – QuickDanger

İlgili konular