• Thứ Ba, 18/09/2007 10:35 (GMT+7)

    Giữ tỷ lệ form và các control của một giao diện ứng dụng?

    Câu hỏi :
    Thiết kế giao diện trong C# bằng cách kéo control ra form rồi định vị. Khi nhấn nút maximize thì form bung lớn toàn màn hình nhưng các control vẫn ở vị trí cũ, không giãn theo nên trông mất cân xứng. Xin chỉ cách giải quyết.
     

    Trả lời :

    Việc thiết kế trực quan giao diện cho 1 form trong C# (hay VB, J#, VB .Net, VC++,...) có ưu điểm là rất thân thiện, dễ dàng, nhanh chóng, nhưng cũng có khuyết điểm là vị trí và kích thước của các phần tử giao diện trong Form sẽ cố định, điều này thích hợp trong trường hợp Form có kích thước cố định (không có điều khiển phóng to/thu nhỏ và người dùng không có khả năng thay đổi động kích thước Form trong lúc sử dụng). Tuy nhiên, có nhiều trường hợp, ta muốn cho phép người dùng thay đổi động kích thước của Form (chế độ mặc định của Form VB cho phép người dùng thay đổi động kích thước Form). Như bạn đã biết, hành vi của hệ thống là chỉ thay đổi kích thước của Form theo yêu cầu người dùng, chứ không hề thay đổi kích thước của các phần tử giao diện trong Form sao cho phù hợp với kích thước mới của Form, việc này phải do ứng dụng thực hiện. Bạn có thể định nghĩa thủ tục Form_Resize, thủ tục này sẽ được kích hoạt mỗi lần bạn thay đổi vị trí/kích thước của Form, bạn sẽ tự viết đoạn code thay đổi vị trí và kích thước của các phần tử giao diện trong Form sao cho phù hợp với kích thước mới của Form. Thí dụ sau sẽ demo việc lập trình thay đổi kích thước và vị trí của các phần tử trong Form. Để đơn giản hóa vần đề, chúng tôi lấy thí dụ đơn giản là Form có 2 đối tượng ListBox và muốn khi Form thay đổi kích thước thì vị trí và kích thước của 2 ListBox trong Form cũng thay đổi theo sao cho mỗi ListBox chiếm nửa dọc của Form, các lề ngang và dọc của các ListBox đều là 10 pixel.
     
     Private Sub Form_Resize()
     Dim top As Integer
     Dim left As Integer
     Dim w As Integer
     Dim h As Integer
     ScaleMode = vbPixels
     'tính lại vị trí và kích thước của ListBox1
     left = 10
     top = 10
     w = Me.ScaleWidth - 20
     h = (Me.ScaleHeight - 30) / 2
     'thiết lập vị trí và kích thước của ListBox1
     lbList1.Move left, top, w, h
     'tính lại vị trí và kích thước của ListBox2
     left = 10
     top = (Me.ScaleHeight - 30) / 2 + 20
     w = Me.ScaleWidth - 20
     h = (Me.ScaleHeight - 30) / 2
     'thiết lập vị trí và kích thước của ListBox2
     lbList2.Move left, top, w, h
     End Sub
     
     Ý tưởng chung của việc tính lại vị trí và kích thước của từng phần tử giao diện trong Form là dựa vào kích thước mới của Form thông qua 2 thuộc tính của Form là ScaleWidth & ScaleHeight.
     

    Chuyên mục: Lập trình