2012-01-16 18 views
8

Napisałem funkcję dynamicznego dodawania elementów do "Panelu".Dynamiczne dodawanie elementów panelu i paski przewijania

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 to UserControl, które posiada właściwość "AutoSize = true" dla wszystkich komponentów. Ten panel ma właściwość AutoScroll, więc ma paski przewijania. Problem polega na tym, że elementy są dodawane na różne sposoby, w zależności od położenia paska przewijania. Jeśli pasek przewijania znajduje się u góry, wszystkie są dodawane w razie potrzeby.

enter image description here

ale jeśli w momencie dodawania paska przewijania na dole, następnie dodać elementy dzieje źle

enter image description here

proszę mi powiedzieć co robię źle i jak to naprawić ? Dziękuję Ci. Przepraszam za zły język angielski

+0

Czy należy dodać informacje i znaczniki co API ty używasz? Domyślam się, że są to formularze systemu Windows, ale dotrzesz do większej liczby osób, jeśli po prostu dodasz odpowiedni tag. – dowhilefor

+0

Tak, jest to forma okna. – Anton

+0

Teraz, naprawię ten problem za pomocą FlowLayoutPanel, ale nadal chcę wiedzieć, co robię źle :) – Anton

Odpowiedz

6

Podczas umieszczania elementów sterujących wewnątrz panelu, trzeba zrekompensować pozycji przewijania:

Zasadniczo, można użyć tej linii:

d.Location = new Point(0, panel1.AutoScrollPosition.Y + Point.Y); 
Powiązane problemy