Câu trả lời:
Set Label
's AutoSize
tài sản để False
, TextAlign
tài sản để MiddleCenter
và Dock
tài sản để Fill
.
Control.Dock
tính ( msdn.microsoft.com/en-us/l Library / ' ), bạn có thể gắn (điều khiển) một điều khiển vào một phía nhất định của container. Ví dụ Left
, Top
, Right
hoặc Bottom
. Fill
nói với điều khiển để lấy tất cả không gian có sẵn trong container.
Dock
cài đặt.
Dock
thiết lập là không cần thiết. Thay đổi thuộc AutoSize
tính cung cấp cho nhãn một hộp giới hạn mà bạn có thể tự điều chỉnh kích thước.
Một số nội dung bổ sung nhỏ để cài đặt theo chương trình:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Dockstyle và liên kết nội dung có thể khác với nhu cầu của bạn. Ví dụ: đối với nhãn đơn giản trên biểu mẫu wpf, tôi sử dụng DockStyle.None.
Bạn sẽ đạt được nó với cài đặt thuộc tính Anchor: Không có.
Nếu bạn không muốn gắn nhãn trong toàn bộ khu vực có sẵn, chỉ cần đặt sự kiện SizeChanged thay vì TextChanged. Thay đổi từng chữ cái sẽ thay đổi thuộc tính chiều rộng của nhãn cũng như văn bản của nó khi tự động hóa thuộc tính được đặt thành True. Vì vậy, bằng cách này, bạn có thể sử dụng bất kỳ công thức nào để giữ nhãn ở giữa.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
Câu trả lời được chấp nhận đã không làm việc cho tôi vì hai lý do:
BackColor
thiết lập cài đặt AutoSize = false
và Dock = Fill
làm cho màu nền lấp đầy toàn bộ biểu mẫuAutoSize
đặt thành false vì văn bản nhãn của tôi là độngThay vào đó, tôi chỉ đơn giản sử dụng chiều rộng của biểu mẫu và chiều rộng của nhãn để tính toán phần bù bên trái:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Tôi muốn làm một cái gì đó tương tự, nhưng trên một hình thức với một hình ảnh nền, tôi thấy rằng khi văn bản trong nhãn thay đổi, việc lặp lại là rõ ràng với phương pháp này, vì vậy tôi đã làm như sau: * Đặt nhãn AutoSize thành true và TextAlign thành Trung tâm
Sau đó, mỗi lần văn bản thay đổi (tôi đã hoàn thành việc sử dụng bộ đếm thời gian) tôi đã gọi phương thức sau:
private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}
Và đặt thuộc tính Vị trí của nhãn thành giá trị trả về này. Điều này đảm bảo rằng nhãn luôn ở giữa biểu mẫu khi văn bản thay đổi và việc sơn lại cho biểu mẫu toàn màn hình không rõ ràng.
Bạn có thể thử đoạn mã sau:
private Point CenterOfMenuPanel<T>(T control, int height=0) where T:Control {
Point center = new Point(
MenuPanel.Size.Width / 2 - control.Width * 2,
height != 0 ? height : MenuPanel.Size.Height / 2 - control.Height / 2);
return center;
}
Đó thực sự là Trung tâm