Hi Ares982,
You can set your Panel.Dock property to DockStyle.Fill, so that your panel automatically fills your main form when the main form is resizing.
In order to solve your second problem, you need to create an event handler for Panel.Paint() event and put your painting logic there. So that whenever another Form covers your application and is moved away later, the Panel can be redrawn correctly. Besides, invoke Panel.Invalidate() explicitly to redraw your panel when you scroll your horizontal scroll bar.
Code Snippet
partial class Form1 : Form
private Panel canvas;
private HScrollBar hScrollBar1;
private void Form1_Load(object sender, EventArgs e)
{
canvas = new Panel();
canvas.Dock = DockStyle.Fill;
canvas.BorderStyle = BorderStyle.Fixed3D;
this.Controls.Add(canvas);
canvas.Paint += new PaintEventHandler(canvas_Paint);
this.Paint += new PaintEventHandler(Form1_Paint);
new HScrollBar();
hScrollBar1.Parent = this;
hScrollBar1.Dock = DockStyle.Bottom;
.Controls.Add(hScrollBar1);
hScrollBar1.Scroll += new ScrollEventHandler(hScrollBar1_Scroll);
}
void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
canvas.Invalidate();
}
void canvas_Paint(object sender, PaintEventArgs e)
{
Graphics g = canvas.CreateGraphics();
g.DrawLine(Pens.Black,
new Point(0, 0),
new Point(canvas.Width, canvas.Height));
g.DrawLine(Pens.Black,
new Point(canvas.Width, 0),
new Point(0, canvas.Height));
}
void Form1_Paint(object sender, PaintEventArgs e)
{
canvas.Invalidate();
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
canvas.Invalidate();
}
Best regards,
Jacob
|