2012-02-12 34 views
5

Suy nghĩ đầu tiên của tôi là nó sẽ là một cái gì đó như thế này:Làm thế nào để có được chiều cao thực sự của TextBox?

int height = textbox.lines.length * lineheight; 

Nhưng nó chỉ đếm "\ xd \ n" và dòng có thể được bao bọc. Tôi có thể nhận được số dòng hiển thị hoặc chiều cao thực của hộp văn bản khi mọi thứ có thể nhìn thấy (chiều cao của văn bản bên trong) không?

+2

winform wpf? gì? Bạn biết rằng chúng tôi không đứng bên cạnh bạn, phải không? – gdoron

+0

có thể trùng lặp của [Làm thế nào tôi có thể hiển thị thanh cuộn trên một System.Windows.Forms.TextBox chỉ khi văn bản không phù hợp?] (Http://stackoverflow.com/questions/73110/how-can-i-show- scrollbars-on-a-system-windows-forms-textbox-only-khi-the-text-d) –

+0

Hans Passant, có thể một phần, nhưng tất cả các câu trả lời ở bên cạnh http://stackoverflow.com/a/4147348/1205147 là sai, và trả lời bởi b8adamson trông khá dài và táo bạo với tôi. Tôi mong đợi có một giải pháp tốt hơn và tốt hơn :) – Mike

Trả lời

6

Tôi không biết nếu bạn đã bao giờ sẽ nhận được một phép đo hoàn hảo, nhưng điều này trở nên gần gũi:

private int GetTextHeight(TextBox tBox) { 
    return TextRenderer.MeasureText(tBox.Text, tBox.Font, tBox.ClientSize, 
      TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl).Height; 
} 

Các TextBox có thể ngốc nghếch. Với tính năng đa dòng được bật, nếu bạn nhấn một ký tự khiến từ bị bao bọc, hãy nhấn backspace sẽ không làm cho từ "bỏ chữ" trừ khi tôi đổi kích thước hộp văn bản. Điều này đã được trên một Win7-64. Tôi không nghĩ rằng điều khiển TextBox luôn làm điều đó.

+3

TextFormatFlags.TextBoxControl làm cho nó một chút ngốc nghếch. –

+0

Yea, cảm ơn bạn, Lars. Tôi đã thực hiện điều gì đó từ điều này: http://stackoverflow.com/a/4147348/1205147 – Mike

+1

Tuyệt vời! Tôi đã cố gắng sử dụng Graphics.MeasureText kết hợp với số dòng (không cần từ bọc trong trường hợp của tôi). Phương pháp này tính toán hơi quá cao cho mỗi dòng, vì vậy khi nhiều dòng, phương pháp của tôi trông lạ với không gian thêm. Phương pháp của bạn được tính toán chính xác ngay tại chỗ! Hoàn hảo!! – awe

0

Hàm GetLineFromCharIndex() cung cấp cho bạn chỉ mục dòng cố định, ngay cả khi văn bản được bao bọc.

int lineCount = textBox1.GetLineFromCharIndex(int.MaxValue) + 1; 
int lineHeightPixel = TextRenderer.MeasureText("X", textBox1.Font).Height; 
Các vấn đề liên quan