Bất kể mục đích là gì.
Nếu kích thước của hộp văn bản phải được thiết lập động dựa trên chuỗi, phải là văn bản bên trong hộp này, không có tùy chọn tốt đẹp.
Lý do: MeasureString sử dụng trình định dạng chuỗi thông thường làm dấu phân tách cho chiều rộng và chiều cao của riêng nó. Phương tiện, vận chuyển trở lại và nguồn cấp dữ liệu dòng cũng được phân tích cú pháp. Kết quả trong một sizeF.Width và sizeF.Height.
Tùy theo chuỗi (và phông chữ và số dòng của nó) những cả hai biến thể mang giá trị, mà đôi khi vô dụng sẽ được sử dụng như các giá trị chiều rộng/chiều cao của một textbox (vì họ có thể lớn hơn giá trị của parentform và điều này sẽ thay đổi kích thước hộp văn bản thành kích thước, với đường viền trái và dưới ngoài khung văn bản của biểu mẫu gốc).
Một số giải pháp vẫn có sẵn, tùy thuộc vào mục tiêu, bạn muốn đạt được.
Một ý tưởng sẽ là: Tạo hộp văn bản trong thiết kế, kích thước = 100 X 100. bật từ gói.
Trong trình xử lý sự kiện OnTextChanged sự kiện của hộp văn bản, chúng tôi chỉ đổi kích thước chiều rộng của hộp văn bản thành giá trị, được xác định bởi chính chúng ta (ví dụ: parentform.Width hoặc giá trị cứng khác).
Điều này sẽ làm cho từ bọc để tính toán lại chuỗi trong hộp văn bản và điều này sẽ sắp xếp lại tất cả các ký tự bên trong hộp văn bản, bởi vì từ bọc được kích hoạt.
Chiều cao của hộp văn bản có thể được đặt khó khăn thành parentform.Height chẳng hạn.
NHƯNG, tốt hơn: đặt chiều cao động, dựa trên giá trị Y của ReturnValue (Điểm) của phương thức texbox.GetPositionFromCharIndex (textbox.TextLength -1). Sau đó, với Math.Min() xác định, nhỏ hơn (hoặc parentform.Height hoặc Point.Y) và đặt lại kích thước hộp văn bản thành Kích thước mới (previousDeterminedWidth, nowDeterminedHeight).
Hãy ghi nhớ (nếu thanh cuộn được bật) để thêm khoảng 17 pixel vào tính toán chiều rộng của bạn.
Trân trọng
Bạn đang sử dụng .NET 1? –
bạn đang thử điều này trong Silverlight? –