2010-03-10 32 views
6

Estoy implementando una aplicación que necesita arrastrar y soltar cuadros de imagen en un panel. Los cuadros de imagen se agregan dinámicamente desde el programa y he establecido la propiedad autoscroll en verdadero en el panel. Pero cuando He arrastrado las cajas en la parte inferior del panel, el tamaño del panel se ha reducido. He puesto la propiedad de autosize en falso en el panel. El panel está acoplado en otro panel. Quiero configurar el tamaño del panel en tiempo de ejecución. ¿Cómo puedo lograrlo? esta.Cambie el tamaño del panel de forma dinámica

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

Este es el constructor del formulario que contenía el panel. Cuando se cargó, los cuadros de imagen se deben agregar al panel y allí se implementan los eventos de arrastrar y soltar del panel.

Por favor, dame una mano ..

+2

¿Es esta web, WinForm o WCF/Silverlight? ¿Cuál es la clase de control real que está utilizando? ¿Estás diciendo que quieres establecer el tamaño solo una vez? – Blanthor

+0

¡Pregunta muy apropiada! Supuse que esto era en Windows Form ... –

+0

Algunas sugerencias: Mueva sus elementos iniciales (* int [,] dummy, int columnSize, int rowSize *) fuera del constructor de la aplicación y realice toda su inicialización y trabajo * después * 'InitializeComponent()' - de lo contrario, algunos de sus datos podrían inicializarse con datos no válidos. – jp2code

Respuesta

2

¿No pueden lograr esto mediante las propiedades Panel.Height y Panel.Width?

De lo contrario, si desea especificar un tamaño mínimo para su panel de forma dinámica, puede hacerlo a través del método SetMinimumSize, si no me equivoco. ¿Es eso lo que estás buscando?

+0

Me he cansado configurando Panel.Height y Panel.Width pero su tamaño se está reduciendo ya que eliminé las imágenes en la línea inferior. ¿Qué más puedo hacer? – Dinu

+0

Estoy usando el formulario de Windows y los controles son cuadros de imagen. Quiero configurar el tamaño del panel una vez en el tiempo de ejecución – Dinu

+0

No obtengo lo que desea lograr en ese momento. ¿Has probado anclarlo a los bordes de tu formulario y luego establecer un tamaño mínimo para él? –

6

No pude hacer que esto funcione a menos que establezca el ancho máximo programáticamente en el código. No importaba cuál era el ancho máximo en el diseñador (o si incluso se había establecido el ancho máximo).

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