Прокрутка фигур на панели - PullRequest
       6

Прокрутка фигур на панели

1 голос
/ 06 сентября 2011

Я работаю над программой, которая рисует фигуры на панели. Я добавил вертикальную полосу прокрутки на панель, но при прокрутке панели формы остаются на месте и не прокручиваются. Как мне сделать прокрутку этих фигур?
Я использую этот код в обработчике рисования для обновления этих фигур:

e.Graphics.FillRectangle(Brushes.Red, selectedRect);

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

Не добавляйте VerticalScrollBar на панель. Панель уже обрабатывает прокрутку сама, когда вы устанавливаете свойство AutoScrollMinSize:

Rectangle selectedRect = new Rectangle(16, 16, 64, 28);

private void Form1_Load(object sender, EventArgs e)
{
  panel1.AutoScrollMinSize = new Size(panel1.ClientRectangle.Width - SystemInformation.VerticalScrollBarWidth, 1200);
}

private void panel1_Paint(object sender, PaintEventArgs e)
{
  e.Graphics.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);
  e.Graphics.FillRectangle(Brushes.Red, selectedRect);
}

private void panel1_Scroll(object sender, ScrollEventArgs e)
{
  panel1.Invalidate();
}
0 голосов
/ 06 сентября 2011

при прокрутке вы должны позаботиться о фактическом положении прокрутки панели и учесть это смещение при повторной раскраске фигур.

Есть примеры, подобные этому в Интернете (не совсем ваш случай, но может помочь выявить проблему):

private int count; 
private ArrayList arrayctl = new ArrayList();

private void button1_Click(object sender, System.EventArgs e) 
{ 
    TextBox newtxt = new TextBox(); 
    newtxt.Text = count.ToString(); 
    count++; arrayctl.Add(newtxt); 
    DrawControls(); 
} 

private void DrawControls() 
{ 
    System.Drawing.Point CurrentPoint; CurrentPoint = panel1.AutoScrollPosition; 
    int i = 0; 
    panel1.Controls.Clear(); 
    panel1.SuspendLayout(); 
    foreach (TextBox txt in arrayctl) 
    {
     panel1.Controls.Add(txt); 
        txt.Width = panel1.ClientRectangle.Width; 
        txt.Top = i; i += txt.Height; 
    } 
    panel1.ResumeLayout(); 
    panel1.AutoScrollPosition = new Point(Math.Abs(panel1.AutoScrollPosition.X), Math.Abs(CurrentPoint.Y)); 
}

Я также нашел это здесь в SO: Положение управления в Windows.Forms.Panel с автопрокруткой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...