Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Xử lý kích thước và vị trí control khi thay đổi size của form

  1. #1
    Ngày gia nhập
    06 2010
    Nơi ở
    Hà Nội
    Bài viết
    52

    Mặc định Xử lý kích thước và vị trí control khi thay đổi size của form

    Mình đã đọc bài viết này bên "Tutorials và Thủ thuật lập trình C#" của forums.
    Mình cũng có code để hiệu chỉnh vị trí và size của control khi thay đổi form.
    private void Form1_Load(object sender, EventArgs e)
    {
    Rectangle rec = new Rectangle();
    foreach( Control CtlOut in this.Controls)
    {
    CtlOut.Tag = Convert.ToDouble(CtlOut.Top) / Convert.ToDouble(this.Height) + ";" + Convert.ToDouble(CtlOut.Left) / Convert.ToDouble(this.Width) + ";" + Convert.ToDouble(CtlOut.Width) / Convert.ToDouble(this.Width)
    + ";" + Convert.ToDouble(CtlOut.Height) / Convert.ToDouble(this.Height) + ";" + Convert.ToDouble(CtlOut.Font.Size) / Convert.ToDouble(this.Height);
    Type t = CtlOut.GetType();
    if (t.FullName == "GroupBox")
    {
    foreach (Control CtlIn in CtlOut.Controls)
    {
    CtlIn.Tag = Convert.ToDouble(CtlIn.Top) / Convert.ToDouble(CtlOut.Height) + ";" + Convert.ToDouble(CtlIn.Left) / Convert.ToDouble(CtlOut.Width) + ";" + Convert.ToDouble(CtlIn.Width) /Convert.ToDouble( CtlOut.Width)
    + ";" + Convert.ToDouble(CtlIn.Height) / Convert.ToDouble(CtlOut.Height) + ";" + Convert.ToDouble(CtlIn.Font.Size) / Convert.ToDouble(CtlOut.Height);
    }
    }
    }
    this.Height = Screen.GetBounds(rec).Height;
    this.Width = Screen.GetBounds(rec).Width;
    this.Top = 0;
    this.Left = 0;
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
    foreach (Control CtlOut in this.Controls)
    {
    ResizeControl(this, CtlOut);
    Type t = CtlOut.GetType();
    if (t.FullName == "GroupBox")
    {
    foreach (Control CtlIn in CtlOut.Controls)
    {
    ResizeControl(CtlOut, CtlIn);
    }
    }
    }
    }
    private void ResizeControl(Control PaCtl, Control ChCtl)
    {
    try
    {
    string ctlTag, CtlTop, CtlLeft, CtlWidth, CtlHeight, ctlFontSize;
    int P1 = 0;
    int P2 = 0;
    ctlTag = ChCtl.Tag.ToString();
    P1 = ctlTag.IndexOf(";");
    CtlTop = ctlTag.Substring(0, P1);
    P2 = P1 + 1;
    P1 = ctlTag.IndexOf(";", P2);
    CtlLeft = ctlTag.Substring(P2, P1 - P2);
    P2 = P1 + 1;
    P1 = ctlTag.IndexOf(";", P2);
    CtlWidth = ctlTag.Substring(P2, P1 - P2);
    P2 = P1 + 1;
    P1 = ctlTag.IndexOf(";", P2);
    CtlHeight = ctlTag.Substring(P2, P1 - P2);
    P2 = P1 + 1;
    ctlFontSize = ctlTag.Substring(P2);
    double dCtlTop = PaCtl.Height * Convert.ToDouble(CtlTop);
    double dCtlLeft = PaCtl.Width * Convert.ToDouble(CtlLeft);
    double dCtlHeight = PaCtl.Height * Convert.ToDouble(CtlHeight);
    double dCtlWidth = PaCtl.Width * Convert.ToDouble(CtlWidth);
    double dctlFontSize = PaCtl.Height * Convert.ToDouble(ctlFontSize);
    ChCtl.Top = Convert.ToInt32(Math.Round(dCtlTop));
    ChCtl.Left = Convert.ToInt32(Math.Round(dCtlLeft));
    ChCtl.Height = Convert.ToInt32(Math.Round(dCtlHeight));
    ChCtl.Width = Convert.ToInt32(Math.Round(dCtlWidth));
    ChCtl.Font = new Font(ChCtl.Font.Name, Convert.ToSingle(dctlFontSize), ChCtl.Font.Style);
    }
    catch
    {
    }
    }

    Cách này mình thấy cũng được nhưng mà load form lúc đầu rất chậm. Có bạn nào biết cách nào tốt hơn chỉ cho mình với. Mình cũng đang rất cần. Vì khi mình design ở máy mình thấy rất ổn nhưng khi mang sang máy khác có độ phân giải thấp hơn là bị che lấp liền. Cảm ơn các bạn đã quan tâm.

  2. #2
    Ngày gia nhập
    03 2010
    Bài viết
    41

    Đó cũng là một cách nhưng thực sự em nên sử dụng các Container một cách hữu hiệu hơn, chú ý đến Folow, Split ... sẽ giúp em nhiều trong vấn đề này, đừng sử dụng mỗi Panel và GridPanel sẽ là một thiếu sót lớn. Nếu cần giúp đỡ về vấn đề design form thì anh sẽ giúp em. Việc độ phân giải máy tính sẽ không còn là vấn đề quá quan trọng đối với em ^_^

Các đề tài tương tự

  1. Thay đổi kích thước FORM thì các control trên form thay đổi theo. Làm như thế nào?
    Gửi bởi sonthuy_st trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 17-10-2012, 11:30 AM
  2. sự tự thay đổi Size của Form trong C#. Tại sao?
    Gửi bởi Vu Thu Huong trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 15-06-2012, 10:25 AM
  3. Trả lời: 9
    Bài viết cuối: 04-08-2011, 12:34 PM
  4. không cho statusStrip thay đổi size của form
    Gửi bởi chitviv trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 24-07-2011, 11:59 AM
  5. Chỉnh Size richtextbox theo Size form
    Gửi bởi nguyenduong127 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 30-08-2009, 04:39 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn