PDA

View Full Version : [Q] Center Control



beatrix
30-08-2003, 16:34
ai biết cách nào đặt control nằm ngay giữa form không (khi form resize luôn)

tui đặt code như sau
trong delegate của event Form Resize

button1.Location = new Point((this.Width - buttion1.Width)/2,(this.Height - buttion1.Height)/2);

nhưng nó chỉ canh giữa với chiều ngang thôi, còn chiều dọc thì nó không canh giữa

nhưng nếu sửa lại vậy thì nó lại canh đúng ngay giữa, nhưng chỉ được lần đầu formload thui, còn dùng chuột resize form thì nó lại giở chứng cũ

button1.Location = new Point((this.Width - buttion1.Width)/2,(this.Height - 2*buttion1.Height)/2);

Help đi

builiem_cdsphn
31-08-2003, 15:46
Bạn thử làm theo như sau:
1.Trong lúc thiết kế đặt lên Form1 2 đối tượng:
Panel1 và Button1. Và ta sẽ căn Button1.
2.Đặt thuộc tính Anchor của Panel1: Theo bốn góc của Form1.
3.Trong cửa sổ gõ Code bạn có các thủ tục sau:
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
With Button1
.Left = (Panel1.Width - .Width) / 2
.Top = (Panel1.Height - .Height) / 2
End With
End Sub

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
With Button1
.Left = (Panel1.Width - .Width) / 2
.Top = (Panel1.Height - .Height) / 2
End With
4.Lời kết:
Tôi Test thử rồi. Thấy nó khá chính xác.

beatrix
31-08-2003, 16:08
ah vâng, cám ơn, nhưng tui lập trình bằng C#, không biết có gì khác biệt không, nhưng theo tui nhớ hình như button trong C# không có property left, right, hay top, bottom, nó được lưu trong struct location hay Bound thì phải .

để tui về port cái này qua C# rồi test thử ha, cám ơn

KEM_WALL
07-09-2003, 11:15
pó tay, sao walls làm cũng bị giống beatrix vậy ta, hic, đọc trong MSDN nó nói trong lúc resize thì height được set = width (walls đã kiểm tra và thấy đúng). vậy thì bây giờ làm sao canh giữa control bi giờ (canh giữa panel thì được, canh giữa form thì không)

builiem_cdsphn
08-09-2003, 11:46
Thực ra việc làm như trên là căn vào giữa Form rồi đó.
Nếu bạn cảm thấy chưa hài lòng thì có thể tính chiều cao của Title Bar của Form sau đó trừ đi sẽ căn vào giữa mà không tình đến Title Bar, và cũng chẳng cần trung gian qua Panel. (Lưu ý về tính bất biến của Title Bar trong các phép Resize và Paint).

KEM_WALL
09-09-2003, 17:22
ok, mọi việc giải quyết xong rồi, vì form_resize lúc form_load sẽ không chạy chính xác, nên gắn kèm cái form_Paint vào thì chạy tốt :)