2011-10-13 19 views
41

Czy można podświetlić/wybrać część tekstu w formancie etykiet Formularz systemu Windows? Wiem, że jest to możliwe z kontrolą RTFtextbox, ale użycie tej kontroli byłoby przesadą, ponieważ potrzebuję utworzyć wiele instancji etykiety.Czy można wybrać tekst na etykiecie formularza systemu Windows?

+1

Co masz na myśli przez „wybierz”? Masz na myśli wybór według kodu, aby użyć tego tekstu po? – GianT971

+1

sorry @ John ... przez select mam na myśli wybór tekstu, np. w RichTextBox można użyć właściwości "SelectedText" etc, aby zaznaczyć/podświetlić część całego tekstu. Efekt jest podobny do zaznaczania/zaznaczania tekstu ręcznie za pomocą myszy. – tunafish24

+2

Pomysł: możesz utworzyć klasę wywodzącą się z etykiety, w której masz jakąś właściwość do zapisywania początkowego i końcowego indeksu tekstu, który ma zostać wybrany, a następnie przesłonięcie zdarzenia, w którym możesz wyróżnić tekst rysując półprzezroczysty prostokąt nad nim – Marco

Odpowiedz

67

Czy można wybrać tekst na etykiecie formularza systemu Windows? - NIE (Przynajmniej nie jest to prosta metoda bez przesłonięcia metody Label.Paint).

Możesz łatwo zmienić TextBox w tym celu.

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

Nie wierzysz? oto przykład dla ciebie.

enter image description here

+7

Problem, który można napotkać, polega na tym, że dynamicznie ustawiając tekst texbox, ukryje tekst, jeśli jest szerszy niż pole tekstowe, w przeciwieństwie do etykiety. –

+2

@TheMuffinMan musisz ustawić właściwość «WordWrap» na «true». –

+1

W razie potrzeby można również ustawić wartość Multiline = True, aby móc zmieniać wysokość panelu TextBox. –

7

Nie, wybór tekstu na etykiecie formularza Windows nie jest możliwy. Zamiast tego możesz użyć do tego pola tekstowego tylko do odczytu.

5

użyć TextBox z BorderStyle zestaw do None i Readonly zestaw do true i Backcolor na zgodny z pojemnika.

3

Nie można zaznaczyć części tekstu na etykiecie. Można jednak użyć obrazu i ustawić go na właściwość Label.Image, jeśli tekst tych etykiet jest statyczny.

+1

to będzie naprawdę trudne do wdrożenia, a tekst jest dynamiczny - to dlatego potrzeba wyróżnienia niektórych z nich. – tunafish24

11

Jak Bala R odpowiedział:

"Użyj TextBox z BorderStyle ustawione na None i Readonly wartość true i Backcolor na zgodny z pojemnika.".

Jeśli ciąg Tekst jest bardzo długi, a Width z TextBox nie wystarczy, aby wyświetlić cały tekst, a następnie można ustawić właściwość TextBoxWidth wyświetlanie wszystkich jego tekst.

Jeśli potrzebujesz znać poprawną liczbę dla Width, możesz użyć do tego celu metody MeasureString z Graphics. W tym przypadku można pobrać instancję z metody CreateGraphics()().

Pierwszy parametr to tekst TextBox, a drugim parametrem jest czcionka TextBox. Ta funkcja zwraca strukturę SizeF. Musisz tylko własność Width, przekonwertować ją na liczbę całkowitą z (int)size.Width lub (int)Math.Round(size.Width).

Nie zapomnij zadzwonić później do metody Dispose() instancji graficznej, ponieważ nie będzie już ona potrzebna.


Możesz napisać własną funkcję, która zrobi wszystko, ten proces:

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

Jeśli masz pole tekstowe o stałej szerokości, które chcesz zmienić wysokość tego kodu, zobacz To pytanie: https://stackoverflow.com/questions/29299297/measure-text-height-wrapped-ina-a- określona szerokość – QuickDanger

Powiązane problemy