2011-10-13 21 views
41

Có thể đánh dấu/chọn một phần văn bản trong điều khiển nhãn Windows Form không? Tôi biết nó có thể với điều khiển RTFtextbox nhưng điều đó bằng cách sử dụng điều khiển đó sẽ là quá mức cần thiết vì tôi cần phải tạo ra nhiều trường hợp của nhãn.Có thể chọn văn bản trên nhãn biểu mẫu Windows không?

+1

Ý anh là gì bởi "chọn"? Bạn có nghĩa là chọn nó bằng mã, để sử dụng văn bản này sau khi? – GianT971

+1

xin lỗi @ John ... bằng cách chọn tôi có nghĩa là lựa chọn văn bản, ví dụ: trong RichTextBox, bạn có thể sử dụng thuộc tính "SelectedText" để chọn/đánh dấu một phần của toàn bộ văn bản. Hiệu ứng này tương tự như việc chọn/đánh dấu văn bản theo cách thủ công bằng chuột. – tunafish24

+2

Chỉ cần một ý tưởng: bạn có thể tạo một lớp có nguồn gốc từ Nhãn, trong đó bạn có một số thuộc tính để lưu trữ chỉ mục bắt đầu và kết thúc của văn bản được chọn, sau đó ghi đè lên sự kiệnPaint bạn có thể đánh dấu văn bản vẽ hình chữ nhật bán trong nó trên nó – Marco

Trả lời

67

Có thể chọn văn bản trên nhãn biểu mẫu Windows không? - KHÔNG (Ít nhất là không có cách dễ dàng mà không có phương pháp Label.Paint trọng)

Bạn có thể dễ dàng thay đổi một TextBox cho mục đích này.

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

Bạn không tin? đây là một ví dụ cho bạn.

enter image description here

+7

Sự cố bạn có thể gặp phải là nếu bạn đang đặt văn bản của hộp thư động, nó sẽ ẩn văn bản nếu văn bản đó rộng hơn hộp văn bản, không giống như nhãn. –

+2

@TheMuffinMan bạn phải đặt thuộc tính «WordWrap» thành «true». –

+1

Nếu cần, bạn cũng có thể đặt Multiline = True để có thể thay đổi chiều cao của TextBox. –

7

Không, không thể chọn văn bản trên Nhãn biểu mẫu Windows. Thay vào đó, bạn có thể sử dụng một hộp văn bản chỉ đọc cho điều này.

5

Sử dụng TextBox với BorderStyle đặt thành NoneReadonly đặt thành true và Backcolor để khớp với vùng chứa.

3

Bạn sẽ không thể đánh dấu một phần của văn bản trên nhãn. Tuy nhiên, bạn có thể sử dụng một hình ảnh và đặt nó vào thuộc tính Label.Image nếu văn bản cho các nhãn này là tĩnh.

+1

thực sự phức tạp để thực hiện, cộng với văn bản là động - đó là lý do tại sao cần phải làm nổi bật một số của nó. – tunafish24

11

Giống như Bala R trả lời:

"Sử dụng một TextBox với BorderStyle thiết lập để None và chỉ đọc thiết lập là true và BackColor để phù hợp với các thùng sơn.".

Nếu chuỗi Văn bản được phát rất dài, và Width của TextBox là không đủ để hiển thị tất cả các văn bản, sau đó bạn có thể thiết lập Width tài sản của TextBox để hiển thị tất cả đó là Text.

Nếu bạn cần biết số chính xác cho Width, thì bạn có thể sử dụng phương thức MeasureStringGraphics cho điều này. Bạn có thể lấy dụ từ phương thức CreateGraphics() của Control (TextBox trong trường hợp này).

Tham số đầu tiên là Văn bản của TextBox và thông số thứ hai là Phông chữ của TextBox. Hàm này trả về cấu trúc SizeF. Bạn chỉ cần thuộc tính Chiều rộng của nó, chuyển đổi nó thành số nguyên với (int)size.Width hoặc (int)Math.Round(size.Width).

Đừng quên gọi phương thức Dispose() của đối tượng đồ họa sau, vì bạn sẽ không cần đến nó nữa.


Bạn có thể viết chức năng của riêng bạn mà sẽ làm tất cả quá trình này:

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

Nếu bạn có một hộp văn bản có chiều rộng cố định mà bạn muốn kích thước chiều cao của mã này, hãy xem Câu hỏi này: https://stackoverflow.com/questions/29299297/measure-text-height-wrapped-in-a- chiều rộng được chỉ định – QuickDanger

Các vấn đề liên quan