472,127 Members | 1,881 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,127 software developers and data experts.

How to center the Panel scroll bars?

I’m using the Panel control that contains a PictureBox control (for
implementing the http://www.codeproject.com/cs/miscctrl/PictureBox.asp).

The Panel is set to AutoScroll = true.

I wish to scroll the appearing vertical and horizontal scrolls bars of the
Panel to the middle of their scrolling range so the contained PictureBox will
be centered inside the Panel.
But I could not find a way to get the scrolls bars for doing that.

Can anybody tell me how can I do that?
---------
Thanks
Sharon
Dec 20 '05 #1
7 17807
You would set the AutoScrollPosition for this.

After my signature is a simple application that demonstrates the idea.

--
Bob Powell [MVP]
Visual C#, System.Drawing

Ramuseco Limited .NET consulting
http://www.ramuseco.com

Find great Windows Forms articles in Windows Forms Tips and Tricks
http://www.bobpowell.net/tipstricks.htm

Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/faqmain.htm

All new articles provide code in C# and VB.NET.
Subscribe to the RSS feeds provided and never miss a new article.

using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

namespace CenterScrollPanel

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class Form1 : System.Windows.Forms.Form

{

private System.Windows.Forms.Panel panel1;

private System.Windows.Forms.Button button1;

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

public Form1()

{

//

// Required for Windows Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.panel1 = new System.Windows.Forms.Panel();

this.button1 = new System.Windows.Forms.Button();

this.SuspendLayout();

//

// panel1

//

this.panel1.AutoScroll = true;

this.panel1.AutoScrollMinSize = new System.Drawing.Size(1024, 768);

this.panel1.Location = new System.Drawing.Point(8, 8);

this.panel1.Name = "panel1";

this.panel1.Size = new System.Drawing.Size(272, 208);

this.panel1.TabIndex = 0;

this.panel1.Paint += new
System.Windows.Forms.PaintEventHandler(this.panel1 _Paint);

//

// button1

//

this.button1.Location = new System.Drawing.Point(16, 232);

this.button1.Name = "button1";

this.button1.TabIndex = 1;

this.button1.Text = "Recenter";

this.button1.Click += new System.EventHandler(this.button1_Click);

//

// Form1

//

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

this.ClientSize = new System.Drawing.Size(292, 266);

this.Controls.Add(this.button1);

this.Controls.Add(this.panel1);

this.Name = "Form1";

this.Text = "Form1";

this.ResumeLayout(false);

}

#endregion

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.Run(new Form1());

}

private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs
e)

{

e.Graphics.Transform=new
Matrix(1,0,0,1,this.panel1.AutoScrollPosition.X,th is.panel1.AutoScrollPosition.Y);

Pen p=new Pen(Color.Red,3);

e.Graphics.DrawLine(p,512,374,512,394);

e.Graphics.DrawLine(p,502,384,522,384);

p.Dispose();

}

private void button1_Click(object sender, System.EventArgs e)

{

this.panel1.AutoScrollPosition=new Point(

this.panel1.AutoScrollMinSize.Width/2-this.panel1.ClientRectangle.Width/2,

this.panel1.AutoScrollMinSize.Height/2-this.panel1.ClientSize.Height/2);

}

}

}


"Sharon" <Sh*****@newsgroups.nospam> wrote in message
news:0B**********************************@microsof t.com...
I'm using the Panel control that contains a PictureBox control (for
implementing the http://www.codeproject.com/cs/miscctrl/PictureBox.asp).

The Panel is set to AutoScroll = true.

I wish to scroll the appearing vertical and horizontal scrolls bars of the
Panel to the middle of their scrolling range so the contained PictureBox
will
be centered inside the Panel.
But I could not find a way to get the scrolls bars for doing that.

Can anybody tell me how can I do that?
---------
Thanks
Sharon

Dec 20 '05 #2
Thanks Bob,

If I understand your sample correctly, the code that set the Panel scroll
bars to the middle is:
private void button1_Click(object sender, System.EventArgs e)
{
this.panel1.AutoScrollPosition = new Point(
this.panel1.AutoScrollMinSize.Width/2-this.panel1.ClientRectangle.Width/2,
this.panel1.AutoScrollMinSize.Height/2-this.panel1.ClientSize.Height/2);
}

But this code assume that panel1.AutoScrollMinSize is set to a value other
then zero, and by that causing the scroll bars to be visible at all time
regardless to the fact that it’s needed or not.
When I tried this code it causes my Panel to have large scrolling range that
are visible at all time. This behavior is not good for me, as it degenerate
the functionally of the zooming and auto scrolling (see
http://www.codeproject.com/cs/miscctrl/PictureBox.asp).
Did I miss something?

Is there a way to do the centering of the Panel scroll bars and to keep the
auto scroll bar sizing and auto appearance behavior?

---------
Thanks
Sharon
Dec 20 '05 #3
Hi Sharon,

I will give this issue a look some time later. I will update you ASAP.
Thanks

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

Dec 22 '05 #4
I believe you can programmatically set the min and max range of the
scroll bars. If this is so, then you would just determine the size of
your image after zooming, set that to the max, set 0 to the min, and
then use Bob's method to center it. This would have to be done
everytime you zoomed in or out, but if you're using the scroll wheel to
zoom, you can tie into that event.

Dec 22 '05 #5
Hi Sharon,

Sorry for letting you wait for so long, I finally have time to look into
this issue.

I think what you want is centering the vertical and horizontal scrollbars,
yes? I think we can get this done, with the code snippet below:

private void button1_Click(object sender, System.EventArgs e)
{
Point pt=new
Point((this.pictureBox1.Location.X+this.pictureBox 1.Width-this.panel1.Client
Rectangle.Width)/2,

(this.pictureBox1.Location.Y+this.pictureBox1.Heig ht-this.panel1.ClientRecta
ngle.Height)/2);
this.panel1.AutoScrollPosition=pt;
}
It works well in my test sample project. Hope it helps

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

Dec 27 '05 #6
Thanks a lot for your help.

It works almost perfectly.

The code is now:

public void CenterImage()
{
// Centering the picture inside the panel.
Point pt = m_picBox.Location;
pt.X = (m_outerPanel.ClientSize.Width / 2) - (m_picBox.Width / 2);
pt.Y = (m_outerPanel.ClientSize.Height / 2) - (m_picBox.Height / 2);
m_picBox.Location = pt;

// Setting the panel scroll bars to the center.
pt = new Point((m_picBox.Location.X +
m_picBox.Width -
m_outerPanel.ClientRectangle.Width) / 2,
(m_picBox.Location.Y +
m_picBox.Height -
m_outerPanel.ClientRectangle.Height)/ 2);
m_outerPanel.AutoScrollPosition = pt;
}

And it works, but no perfectly; the panel scrolling is not exactly centering
the image inside the panel, but it's close.
-------
Thank
Sharon
Jan 10 '06 #7
Hi Sharon,

I am glad my reply can help you.

Yes, this code only makes the scrollbars of panel scroll to the center, but
it does not keep the images to the center. Thanks

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

Jan 12 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Jason Chu | last post: by
1 post views Thread by Chris Morse | last post: by
4 posts views Thread by Thiru .Net | last post: by
2 posts views Thread by shahoo | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.