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ü?
cevap
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
Karşılaşabileceğiniz sorun, metin kutusunun metnini dinamik olarak ayarlarsanız, etiketin aksine metin kutusundan daha genişse metni gizler. –
@TheMuffinMan «WordWrap» özelliğini «true» olarak ayarlamanız gerekir. –
Gerekirse, TextBox'un yüksekliğini değiştirebilmek için Multiline = True değerini de ayarlayabilirsiniz. –
Hayır, Windows Form Etiketinde metin seçmek mümkün değildir. Bunun için salt okunur bir metin kutusu kullanabilirsiniz.
kullan TextBox
true
ve BackColor için ayarlanan None
için ayarlanmış BorderStyle
ile ve Readonly
kabın eşleşecek şekilde.
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.
uygulamak gerçekten zor, ancak metin dinamik - bu yüzden bazılarını vurgulamak gerek. – tunafish24
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
aitWidth
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;
}
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
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
Ü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
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