2012-01-16 19 views
8

Escribí una función para agregar elementos dinámicamente al "Panel".Agregar elemento dinámico del panel y barras de desplazamiento

public int State;   
public Point Point = new Point(0, 0); 
public void DialogAdd(string message, string author) 
     { 
      var d = new DialogMessage(); 
      if(State == 0) 
      { 
       d.BackColor = Color.FromArgb(255, 237, 241, 245); 
       State = 1; 
      } 
      else 
      { 
       State = 0; 
      } 


      d.Controls["name"].Text = author; 
      d.Location = new Point(0, Point.Y); 
      d.Controls["msg"].Text = message; 
      Point.Y += d.Size.Height; 
      Controls["panel1"].Controls.Add(d); 

     } 

DialogMessage es UserControl, que tiene la propiedad "AutoSize = true" en todos los componentes. Este panel tiene la propiedad AutoScroll, por lo que tiene barras de desplazamiento. El problema es que los elementos se agregan de diferentes maneras, dependiendo de la posición de la barra de desplazamiento. Si la barra de desplazamiento está en la parte superior, entonces todo se agrega según sea necesario.

enter image description here

pero si en el momento de la adición de la barra de desplazamiento en la parte inferior, a continuación, agregar elementos que va mal

enter image description here

por favor, dime lo que estoy haciendo mal y cómo solucionarlo ? Gracias. lo siento por mala Inglés

+0

pudiera por favor añadir informaciones y etiquetas lo API ¿Tu estas usando? Supongo que son formularios de Windows, pero llegarás a más personas si solo agregas la etiqueta correcta. – dowhilefor

+0

Sí, son formularios de Windows. – Anton

+0

Ahora, soluciono este problema usando FlowLayoutPanel, pero aún quiero saber qué estoy haciendo mal :) – Anton

Respuesta

6

Al colocar los controles dentro del panel, tiene que compensar la posición de desplazamiento:

Básicamente, trate de usar esta línea:

d.Location = new Point(0, panel1.AutoScrollPosition.Y + Point.Y); 
Cuestiones relacionadas