Posts Tagged ‘ Panel

Zmiana rozmiarów paneli w c#

Przeszukując czeluści internetu natrafiłem na bardzo ciekawą, rozszerzającą możliwości zwykłego Forms.Panel ‘u o dynamiczne zmienianie jego rozmiaru. Klasę, która zapewnia tę funkcjonalność znalazłem na forum msdn, oto ona:

Klasę należy dodać do projektu, skompilować. Nowa kontrolka powinna pojawić się w Toolbox ’ie

nobugz:

using System;
using System.Drawing;
using  System.Windows.Forms;

public class SizeablePanel : Panel {
 private const int cGripSize = 20;
 private bool mDragging;
 private Point mDragPos;

 public SizeablePanel() {
 this.DoubleBuffered = true;
 this.SetStyle(ControlStyles.ResizeRedraw, true);
 this.BackColor =  Color.White;
 }

 protected override void  OnPaint(PaintEventArgs e) {
 ControlPaint.DrawSizeGrip(e.Graphics,  this.BackColor,
 new Rectangle(this.ClientSize.Width -  cGripSize, this.ClientSize.Height - cGripSize, cGripSize, cGripSize));
 base.OnPaint(e);
 }

 private bool IsOnGrip(Point pos) {
 return pos.X >= this.ClientSize.Width - cGripSize &&
 pos.Y >= this.ClientSize.Height - cGripSize;
 }

 protected override void OnMouseDown(MouseEventArgs e) {
 mDragging  = IsOnGrip(e.Location);
 mDragPos = e.Location;
 base.OnMouseDown(e);
 }

 protected override void  OnMouseUp(MouseEventArgs e) {
 mDragging = false;
 base.OnMouseUp(e);
 }

 protected override void  OnMouseMove(MouseEventArgs e) {
 if (mDragging) {
 this.Size = new Size(this.Width + e.X - mDragPos.X,
 this.Height + e.Y - mDragPos.Y);
 mDragPos = e.Location;
 }
 else if (IsOnGrip(e.Location)) this.Cursor = Cursors.SizeNWSE;
 else this.Cursor = Cursors.Default;
 base.OnMouseMove(e);
 }
}

Od siebie dodałbym tylko


this.BringToFront();

w OnMouseMove();.

Partnerzy Pro: