469,339 Members | 8,437 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,339 developers. It's quick & easy.

Scrolling in a panel

To keep my example simple, let's say I have a windows application form with
a panel in it. For this example, I want to draw a single line in the panel,
which is larger than the size of the panel. Is there a way to get the
scrollbars to show up?

Also....If I were to put a control (like a button) into the panel, the
scrollbars are there...but my line doesn't redraw properly.

How should I be doing this? Thanks.

PS. here's code snip of what I'm trying to do....

Private components As System.ComponentModel.IContainer

Friend WithEvents Panel1 As System.Windows.Forms.Panel

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Me.Panel1 = New System.Windows.Forms.Panel

Me.SuspendLayout()

'

'Panel1

'

Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _

Or System.Windows.Forms.AnchorStyles.Left) _

Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)

Me.Panel1.AutoScroll = True

Me.Panel1.BackColor = System.Drawing.Color.White

Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D

Me.Panel1.Location = New System.Drawing.Point(112, 56)

Me.Panel1.Name = "Panel1"

Me.Panel1.Size = New System.Drawing.Size(472, 344)

Me.Panel1.TabIndex = 0

'

'Preview

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(592, 413)

Me.Controls.Add(Me.Panel1)

Me.Name = "Preview"

Me.Text = "Preview"

Me.ResumeLayout(False)

End Sub

Private Sub DrawIt(ByVal g As Graphics)

g.DrawLine(New Pen(Color.Black), 2, 2, 500, 400)

End Sub

Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

DrawIt(e.Graphics)

End Sub
Nov 21 '05 #1
5 21479
You should use AutoScrollMinSize and AutoScrollMargin to let the control
know that your area has a certain size, whether it has other controls in it
or not.
To redraw the line, you should capture the OnAutoScroll event (I don't
remember the exact name, but it's something like that) and call
[MyControl].Invalidate() or even [MyForm].Invalidate(true)...
With this, .Net calls the Paint event for your MyControl or your MyForm
(invalidating all children controls).
I'm not sure it's not called automatically if you set the drawing styles of
your control... Try your code with the AutoScrollMinSize and Margin set, and
do the scrolling to see if your line gets redrawn...
Hope this helps...
VBen.

"Rob T" <RT*********@DONTwalchemSPAM.com> escribió en el mensaje
news:Od**************@TK2MSFTNGP15.phx.gbl...
To keep my example simple, let's say I have a windows application form with a panel in it. For this example, I want to draw a single line in the panel, which is larger than the size of the panel. Is there a way to get the
scrollbars to show up?

Also....If I were to put a control (like a button) into the panel, the
scrollbars are there...but my line doesn't redraw properly.

How should I be doing this? Thanks.

PS. here's code snip of what I'm trying to do....

Private components As System.ComponentModel.IContainer

Friend WithEvents Panel1 As System.Windows.Forms.Panel

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Panel1 = New System.Windows.Forms.Panel

Me.SuspendLayout()

'

'Panel1

'

Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _

Or System.Windows.Forms.AnchorStyles.Left) _

Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)

Me.Panel1.AutoScroll = True

Me.Panel1.BackColor = System.Drawing.Color.White

Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D

Me.Panel1.Location = New System.Drawing.Point(112, 56)

Me.Panel1.Name = "Panel1"

Me.Panel1.Size = New System.Drawing.Size(472, 344)

Me.Panel1.TabIndex = 0

'

'Preview

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(592, 413)

Me.Controls.Add(Me.Panel1)

Me.Name = "Preview"

Me.Text = "Preview"

Me.ResumeLayout(False)

End Sub

Private Sub DrawIt(ByVal g As Graphics)

g.DrawLine(New Pen(Color.Black), 2, 2, 500, 400)

End Sub

Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

DrawIt(e.Graphics)

End Sub

Nov 21 '05 #2
See the article in Windows Forms Tips and Tricks that explains autoscroll

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

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.

"Rob T" <RT*********@DONTwalchemSPAM.com> wrote in message
news:Od**************@TK2MSFTNGP15.phx.gbl...
To keep my example simple, let's say I have a windows application form
with a panel in it. For this example, I want to draw a single line in the
panel, which is larger than the size of the panel. Is there a way to get
the scrollbars to show up?

Also....If I were to put a control (like a button) into the panel, the
scrollbars are there...but my line doesn't redraw properly.

How should I be doing this? Thanks.

PS. here's code snip of what I'm trying to do....

Private components As System.ComponentModel.IContainer

Friend WithEvents Panel1 As System.Windows.Forms.Panel

<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()

Me.Panel1 = New System.Windows.Forms.Panel

Me.SuspendLayout()

'

'Panel1

'

Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _

Or System.Windows.Forms.AnchorStyles.Left) _

Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)

Me.Panel1.AutoScroll = True

Me.Panel1.BackColor = System.Drawing.Color.White

Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D

Me.Panel1.Location = New System.Drawing.Point(112, 56)

Me.Panel1.Name = "Panel1"

Me.Panel1.Size = New System.Drawing.Size(472, 344)

Me.Panel1.TabIndex = 0

'

'Preview

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(592, 413)

Me.Controls.Add(Me.Panel1)

Me.Name = "Preview"

Me.Text = "Preview"

Me.ResumeLayout(False)

End Sub

Private Sub DrawIt(ByVal g As Graphics)

g.DrawLine(New Pen(Color.Black), 2, 2, 500, 400)

End Sub

Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

DrawIt(e.Graphics)

End Sub

Nov 21 '05 #3
Thanks for the tip on using the matrix...works great!

"Bob Powell [MVP]" <bob@_spamkiller_bobpowell.net> wrote in message
news:%2****************@TK2MSFTNGP12.phx.gbl...
See the article in Windows Forms Tips and Tricks that explains autoscroll

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

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.

"Rob T" <RT*********@DONTwalchemSPAM.com> wrote in message
news:Od**************@TK2MSFTNGP15.phx.gbl...
To keep my example simple, let's say I have a windows application form
with a panel in it. For this example, I want to draw a single line in the
panel, which is larger than the size of the panel. Is there a way to get
the scrollbars to show up?

Also....If I were to put a control (like a button) into the panel, the
scrollbars are there...but my line doesn't redraw properly.

How should I be doing this? Thanks.

PS. here's code snip of what I'm trying to do....

Private components As System.ComponentModel.IContainer

Friend WithEvents Panel1 As System.Windows.Forms.Panel

<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()

Me.Panel1 = New System.Windows.Forms.Panel

Me.SuspendLayout()

'

'Panel1

'

Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _

Or System.Windows.Forms.AnchorStyles.Left) _

Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)

Me.Panel1.AutoScroll = True

Me.Panel1.BackColor = System.Drawing.Color.White

Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D

Me.Panel1.Location = New System.Drawing.Point(112, 56)

Me.Panel1.Name = "Panel1"

Me.Panel1.Size = New System.Drawing.Size(472, 344)

Me.Panel1.TabIndex = 0

'

'Preview

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(592, 413)

Me.Controls.Add(Me.Panel1)

Me.Name = "Preview"

Me.Text = "Preview"

Me.ResumeLayout(False)

End Sub

Private Sub DrawIt(ByVal g As Graphics)

g.DrawLine(New Pen(Color.Black), 2, 2, 500, 400)

End Sub

Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

DrawIt(e.Graphics)

End Sub


Nov 21 '05 #4
Thanks. That worked great. I couln't find any events that were like
OnAutoScroll...but when I scrolled, it refreshed on it's own anyway.
Perhaps it triggers the paint event automatically...
"VBen" <bm******@compucaremexico.com> wrote in message
news:Ow**************@TK2MSFTNGP15.phx.gbl...
You should use AutoScrollMinSize and AutoScrollMargin to let the control
know that your area has a certain size, whether it has other controls in
it
or not.
To redraw the line, you should capture the OnAutoScroll event (I don't
remember the exact name, but it's something like that) and call
[MyControl].Invalidate() or even [MyForm].Invalidate(true)...
With this, .Net calls the Paint event for your MyControl or your MyForm
(invalidating all children controls).
I'm not sure it's not called automatically if you set the drawing styles
of
your control... Try your code with the AutoScrollMinSize and Margin set,
and
do the scrolling to see if your line gets redrawn...
Hope this helps...
VBen.

"Rob T" <RT*********@DONTwalchemSPAM.com> escribió en el mensaje
news:Od**************@TK2MSFTNGP15.phx.gbl...
To keep my example simple, let's say I have a windows application form

with
a panel in it. For this example, I want to draw a single line in the

panel,
which is larger than the size of the panel. Is there a way to get the
scrollbars to show up?

Also....If I were to put a control (like a button) into the panel, the
scrollbars are there...but my line doesn't redraw properly.

How should I be doing this? Thanks.

PS. here's code snip of what I'm trying to do....

Private components As System.ComponentModel.IContainer

Friend WithEvents Panel1 As System.Windows.Forms.Panel

<System.Diagnostics.DebuggerStepThrough()> Private Sub

InitializeComponent()

Me.Panel1 = New System.Windows.Forms.Panel

Me.SuspendLayout()

'

'Panel1

'

Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _

Or System.Windows.Forms.AnchorStyles.Left) _

Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)

Me.Panel1.AutoScroll = True

Me.Panel1.BackColor = System.Drawing.Color.White

Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D

Me.Panel1.Location = New System.Drawing.Point(112, 56)

Me.Panel1.Name = "Panel1"

Me.Panel1.Size = New System.Drawing.Size(472, 344)

Me.Panel1.TabIndex = 0

'

'Preview

'

Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)

Me.ClientSize = New System.Drawing.Size(592, 413)

Me.Controls.Add(Me.Panel1)

Me.Name = "Preview"

Me.Text = "Preview"

Me.ResumeLayout(False)

End Sub

Private Sub DrawIt(ByVal g As Graphics)

g.DrawLine(New Pen(Color.Black), 2, 2, 500, 400)

End Sub

Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

DrawIt(e.Graphics)

End Sub


Nov 21 '05 #5
You may also be interested in this post:
http://blogs.msdn.com/rickbrew/archi...24/165493.aspx
Nov 21 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Nathan | last post: by
1 post views Thread by John | last post: by
reply views Thread by Elroyskimms | last post: by
2 posts views Thread by shahoo | last post: by
4 posts views Thread by mateusz.zajakala | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by Purva khokhar | last post: by
1 post views Thread by haryvincent176 | last post: by
1 post views Thread by Marylou17 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.