2010-03-10 18 views
6

Bir panelde görüntü kutularını sürükleyip bırakması gereken bir uygulama uyguluyorum. Resim kutuları dinamik olarak programdan eklenir ve böylece autoscroll özelliğini panelde true olarak ayarladım. Panelin alt tarafındaki kutuları sürükledim, panelin boyutu azaldı. Panelde autosize özelliğini yanlış yerleştirdim. Panel başka bir panele yerleştirildi. Çalışma zamanında panelin boyutunu ayarlamak istiyorum. bu.Panelin boyutunu dinamik olarak değiştirin

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); 
    } 

Bu, panel içeren formun yapıcısıdır. Yüklendiğinde panele resim kutuları eklenmeli ve orada sürükle bırak paneli uygulanmalıdır.

bana yardım eli verin ..

+2

Web, WinForm veya WCF/Silverlight mı? Kullandığınız gerçek kontrol sınıfı nedir? Boyutu sadece bir kez ayarlamak istediğini mi söylüyorsun? – Blanthor

+0

Çok uygun bir soru! Bunun Windows Formun'unda olduğunu farz ettim ... –

+0

Birkaç öneri: Uygulama öğütücünüzün ilk öğelerini (* int [,] dummy, int columnSize, int rowSize *) taşıyın ve başlatmanızın ve çalışmanızın * tümünü yapın * 'InitializeComponent()' - aksi halde, verilerinizin bir kısmı geçersiz verilerle başlıyor olabilir. – jp2code

cevap

2

Eğer Panel.Height ve Panel.Width özellikleri ile bunu başarmak olmaz mı?

Aksi takdirde, paneliniz için minimum boyut belirlemek istediğinizde, yanlışsa, bunu SetMinimumSize yöntemiyle yapabilirsiniz. Aradığın şey bu mu?

+0

Panel.Height ve Panel.Width'i ayarlayarak yoruldum ancak görüntüleri alt satırda kaldırdığım için boyutu azalıyor. Başka ne yapabilirim? – Dinu

+0

Windows formunu kullanıyorum ve kontroller resimli kutulardır. Çalışma zamanında bir panel boyutunu ayarlamak istiyorum – Dinu

+0

O zaman elde etmek istediğiniz şeyi anlamıyorum. Formunuzun kenarlıklarına Anchoring'i denediniz ve bunun için minimum boyut ayarladınız mı? –

6

Maksimum genişliği program aracılığıyla kod olarak ayarlamadıkça bunu işe alamıyorum. Tasarımcıda maksimum genişliğin ne olduğu önemli değildi (veya maksimum genişlik ayarlanmış olsa bile).

int newWidth = 200; 
panel.MaximumSize = new Size(newWidth, panel.Height); 
panel.Size = new Size(newWidth, panel.Height); 
İlgili konular