2010-03-10 8 views
6

Sto implementando un'applicazione che deve trascinare e rilasciare le finestre di immagini in un pannello. Le finestre di immagine vengono aggiunte dinamicamente dal programma e quindi ho impostato la proprietà autoscroll su true nel pannello. Ma quando Ho trascinato le caselle in basso nel pannello, la dimensione del pannello è stata ridotta. Ho messo la proprietà autosize false nel pannello. Il pannello è ancorato in un altro pannello. Voglio impostare la dimensione del pannello in fase di esecuzione. Come posso ottenere Questo.Modifica dinamicamente la dimensione del pannello

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

Questo è il costruttore del modulo che contiene il pannello. Quando è stato caricato, le caselle immagine devono essere aggiunte al pannello e vengono implementati gli eventi di trascinamento del pannello.

favore mi dia una mano ..

+2

Questo Web, WinForm o WCF/Silverlight? Qual è l'attuale classe di controllo che stai utilizzando? Stai dicendo che vuoi impostare la dimensione solo una volta? – Blanthor

+0

Domanda molto appropriata! Ho pensato che fosse in Windows Form ... –

+0

Alcuni suggerimenti: sposta gli elementi iniziali (* int [,] dummy, int columnSize, int rowSize *) al di fuori del costruttore dell'applicazione e esegui tutto l'inizializzazione e il lavoro * dopo * 'InitializeComponent()' - in caso contrario, alcuni dati potrebbero essere inizializzati con dati non validi. – jp2code

risposta

2

Non riesci a raggiungere questo obiettivo le proprietà Panel.Height e Panel.Width?

In caso contrario, se si desidera specificare una dimensione minima per il pannello in modo dinamico, è possibile farlo tramite il metodo SetMinimumSize, se non si sbaglia. E 'quello che stai cercando?

+0

Mi sono stancato impostando Panel.Height e Panel.Width ma la sua dimensione si sta riducendo poiché ho rimosso le immagini nella riga inferiore. Che altro posso fare? – Dinu

+0

Sto usando il modulo di Windows e i controlli sono box immagine. Voglio impostare la dimensione del pannello una volta in fase di esecuzione – Dinu

+0

Non riesco a ottenere ciò che desideri ottenere. Hai provato ad ancorarlo ai bordi del tuo modulo e quindi a impostare una dimensione minima per esso? –

6

Non riuscivo a farlo funzionare a meno che non imposti la larghezza massima a livello di codice nel codice. Non importava quale fosse la larghezza massima nel designer (o se la larghezza massima era impostata).

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