umuieme
umuieme

Reputation: 849

Always Scroll to bottom in vertical scroll bar

I have a flowlayoutpanel in my winform in which the images are added dynamically. I want the vertical scroll bar to always be at the bottom showing the last image added. How can i do that? I have

AutoScroll = true

FLow Direction = Top Down

Wrap Content = False

Upvotes: 5

Views: 7883

Answers (5)

daniele3004
daniele3004

Reputation: 13900

This is the correct way:

MyControl uct = new MyControl();
uct.Parent = flowLayoutPanel;

this.ActiveControl = uct;



if (flowLayoutPanel.VerticalScroll.Visible)
{
    flowLayoutPanel.ScrollControlIntoView(uct);
}

Upvotes: 0

bclough
bclough

Reputation: 11

Forcing A FlowLayoutPanel to scroll to and display all of a control. Code Correction:

flowLayoutPanel.ScrollControlIntoView(Control_To_Add); // Control_To_Add is the control we want to scroll to
Button TempButton = new Button();
TempButton.Width = _Panel.ClientRectangle.Width - 6; // Make the last control in the _Panel
flowLayoutPanel.Controls.Add(TempButton); // We add this TempButton so we can scroll to the bottom of the _Panel.Controls
flowLayoutPanel.ScrollControlIntoView(TempButton); // We scroll to TempButton at the bottom of the _Panel.Controls
flowLayoutPanel.Controls.Remove(TempButton); // We remove TempButton
b.Dispose(); // clean up

Upvotes: 0

bclough
bclough

Reputation: 11

Here is a way to force the last control into view.

        flowLayoutPanel.ScrollControlIntoView(Control_To_Add); // Control_To_Add is the control we want to scroll to
        Button TempButton = new Button();
        TempButton.Width = _Panel.ClientRectangle.Width - 6; // Make the last control in the _Panel
        flowLayoutPanel.Controls.Add(TempButton); // We add this TempButton so we can scroll to the bottom of the _Panel.Controls
        flowLayoutPanel.ScrollControlIntoView(b); // We scroll to TempButton at the bottom of the _Panel.Controls
        flowLayoutPanel.Controls.Remove(b); // We remove TempButton
        b.Dispose(); // clean up

Upvotes: 1

Hans Passant
Hans Passant

Reputation: 941327

Scrollable container controls, like FlowLayoutPanel, automatically keep the control with the focus in view. But PictureBox is special, it cannot receive the focus. So you have to help by explicitly asking the FLP to make the added control visible, use its ScrollControlIntoView() method. Like this:

    var pic = new PictureBox();
    //...
    flowLayoutPanel1.Controls.Add(pic);
    flowLayoutPanel1.ScrollControlIntoView(pic);

With the strong advantage that this works for any layout setting you applied to the FLP. You can also tinker with the AutoScrollPosition property, but it is harder to get that right:

    flowLayoutPanel1.AutoScrollPosition = new Point(
        pic.Right  - flowLayoutPanel1.AutoScrollPosition.X, 
        pic.Bottom - flowLayoutPanel1.AutoScrollPosition.Y);

Upvotes: 18

Tanuj Wadhwa
Tanuj Wadhwa

Reputation: 2045

Try this:

scrollBar.Value=scrollBar.Maximum;

here scrollBar is your ScrollBar control in winform.

For more detail, check this.

Upvotes: 1

Related Questions