2010-03-10 71 views
6

Tôi đang triển khai một ứng dụng cần kéo và thả hộp hình ảnh trong một bảng. Hộp hình ảnh được thêm động từ chương trình và vì vậy tôi đã đặt thuộc tính autoscroll thành true trong bảng điều khiển.Nhưng khi Tôi đã kéo ra các hộp ở dưới cùng trong bảng điều khiển kích thước bảng điều khiển đã giảm. Tôi đã đặt autosize tài sản sai trong panel.The bảng điều khiển được cập cảng trong một panel.I muốn thiết lập kích thước của bảng điều khiển tại thời gian chạy. Làm thế nào tôi có thể đạt được điều này.Thay đổi kích thước của bảng điều khiển động

public form1(int[,] dummy, int columnSize, int rowSize) 
    { 
     this.dummy= dummy; 
     numOfColumns = columnSize; 
     numOfRows = rowSize; 
     getData(); 
     addIds = addIdArray; 
     data = mylist; 
     InitializeComponent(); 
     //panel1.MinimumSize = new Size(columnSize * 40, rowSize * 40); 
     //panel1.Height = rowSize * 40; 
     //panel1.Width = columnSize * 40; 
     //panel4.Height = rowSize * 40; 
     //panel4.Width = columnSize * 40; 
     int x, y; 
     Structures.EmptyRectSpace space = new Structures.EmptyRectSpace(); 
     for (int i = 0; i < data.Count; i++)// set picture boxes 
     { 
      space = (Structures.EmptyRectSpace)data[i]; 
      x = space.startingJ; 
      y = space.startingI; 
      int h, w; 
      h = space.length; 
      w = space.width; 

      p = new PictureBox(); 
       p.Width = w * 40; 
       p.Height = h * 40; 
       p.BackColor = Color.DarkGreen; 
       p.Image = Properties.Resources.v; 
       p.BorderStyle = BorderStyle.FixedSingle; 
       p.Name = addIdArray[i].ToString(); 
       p.Location = new Point((x + 1 - w) * 40, (y + 1 - h) * 40); 

       this.panel1.Controls.Add(p); 
     } 

     foreach (Control c in this.panel1.Controls) 
     { 
      if (c is PictureBox) 
      { 
       c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown); 
      } 
     } 
     this.panel1.DragOver += new System.Windows.Forms.DragEventHandler(this.panel1_DragOver); 
     panel1.DragOver += new DragEventHandler(panel1_DragOver); 
     panel1.DragDrop += new DragEventHandler(panel1_DragDrop); 
     panel1.AllowDrop = true; 
     panel2.AllowDrop = true; 
     foreach (Control c in this.panel2.Controls) 
     { 
      c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown); 
     } 
     this.panel2.DragOver += new System.Windows.Forms.DragEventHandler(this.panel2_DragOver); 
     panel2.DragOver += new DragEventHandler(panel2_DragOver); 
     panel2.DragDrop += new DragEventHandler(panel2_DragDrop); 
    } 

Đây là hàm tạo của biểu mẫu chứa bảng điều khiển. Khi nó tải các hộp hình ảnh phải được thêm vào bảng điều khiển và có kéo thả các sự kiện của bảng điều khiển được thực hiện.

Xin vui lòng cho tôi một bàn tay giúp đỡ ..

+2

Đây có phải là Web, WinForm hoặc WCF/Silverlight không? Lớp kiểm soát thực tế bạn đang sử dụng là gì? Bạn đang nói rằng bạn muốn thiết lập kích thước chỉ một lần? – Blanthor

+0

Câu hỏi rất phù hợp! Tôi cho rằng đây là trong Windows Form ... –

+0

Một vài gợi ý: Di chuyển các mục ban đầu của bạn (* int [,] dummy, int columnSize, int rowSize *) bên ngoài constructor ứng dụng của bạn và thực hiện tất cả khởi tạo và làm việc của bạn * sau * 'InitializeComponent()' - nếu không, một số dữ liệu của bạn có thể được khởi tạo với dữ liệu không hợp lệ. – jp2code

Trả lời

2

bạn không thể đạt được điều này bởi các tính chất Panel.Height và Panel.Width?

Nếu không, nếu bạn muốn chỉ định kích thước tối thiểu cho bảng điều khiển của mình theo cách động, bạn có thể làm như vậy thông qua phương pháp SetMinimumSize, nếu tôi không nhầm. Đó là những gì bạn đang tìm kiếm?

+0

Tôi đã mệt mỏi bằng cách thiết lập Panel.Height và Panel.Width nhưng kích thước của nó là giảm như tôi đã loại bỏ hình ảnh ở dòng dưới cùng. Tôi có thể làm gì khác? – Dinu

+0

Tôi đang sử dụng hình thức cửa sổ và điều khiển là hộp hình ảnh. Tôi muốn thiết lập kích thước của bảng điều khiển một lần tại thời gian chạy – Dinu

+0

Tôi không nhận được những gì bạn muốn đạt được sau đó. Bạn đã thử Neo nó vào đường viền của biểu mẫu rồi đặt kích thước tối thiểu cho nó chưa? –

6

Tôi không thể làm việc này trừ khi tôi đặt chiều rộng tối đa theo lập trình trong mã. Nó không quan trọng những gì chiều rộng tối đa là trong thiết kế (hoặc nếu chiều rộng tối đa đã được thiết lập).

int newWidth = 200; 
panel.MaximumSize = new Size(newWidth, panel.Height); 
panel.Size = new Size(newWidth, panel.Height); 
Các vấn đề liên quan