By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,749 Members | 1,615 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,749 IT Pros & Developers. It's quick & easy.

Scrolling in a panel

P: n/a
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
Share this Question
Share on Google+
5 Replies


P: n/a
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

P: n/a
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

P: n/a
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

P: n/a
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

P: n/a
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.