2011-09-21 36 views
5

Tôi đang vẽ văn bản trên đối tượng System.Drawing.Graphics. Tôi đang sử dụng phương pháp DrawString, với chuỗi văn bản, một Font, một Brush, một giới hạn RectangleFStringFormat làm đối số.Xác minh văn bản bằng DrawString trong C#

Nhìn vào StringFormat, tôi nhận thấy rằng tôi có thể đặt thuộc tính Alignment thành Near, Center hoặc Far. Tuy nhiên tôi đã không tìm thấy một cách để thiết lập nó để biện minh. Làm thế nào tôi có thể đạt được điều này?

Cảm ơn sự giúp đỡ của bạn!

Trả lời

1

Không có cách tích hợp để thực hiện. Một số công việc ở quanh được đề cập về chủ đề này:

http://social.msdn.microsoft.com/Forums/zh/winforms/thread/aebc7ac3-4732-4175-a95e-623fda65140e

Họ đề nghị sử dụng một ghi đè RichTextBox, trọng các SelectionAlignment tài sản (xem this page for how) và thiết lập nó để Justify.

Các ruột của override xoay quanh cuộc gọi PInvoke này:

PARAFORMAT fmt = new PARAFORMAT(); 
fmt.cbSize = Marshal.SizeOf(fmt); 
fmt.dwMask = PFM_ALIGNMENT; 
fmt.wAlignment = (short)value; 

SendMessage(new HandleRef(this, Handle), // "this" is the RichTextBox 
    EM_SETPARAFORMAT, 
    SCF_SELECTION, ref fmt); 

Không chắc như thế nào điều này có thể được tích hợp vào mô hình hiện tại của bạn (kể từ khi tôi giả sử bạn đang vẽ hơn văn bản), nhưng nó có thể là lựa chọn duy nhất của bạn.

1

tôi thấy nó :)

http://csharphelper.com/blog/2014/10/fully-justify-a-line-of-text-in-c/

trong ngắn - bạn có thể biện minh cho văn bản trong mỗi dòng riêng biệt khi bạn biết chiều rộng nhất định của toàn bộ đoạn:

float extra_space = rect.Width - total_width; // where total_width is the sum of all measured width for each word 
int num_spaces = words.Length - 1; // where words is the array of all words in a line 
if (words.Length > 1) extra_space /= num_spaces; // now extra_space has width (in px) for each space between words 

phần còn lại là khá trực quan:

float x = rect.Left; 
float y = rect.Top; 
for (int i = 0; i < words.Length; i++) 
{ 
    gr.DrawString(words[i], font, brush, x, y); 

    x += word_width[i] + extra_space; // move right to draw the next word. 
} 
Các vấn đề liên quan