XPGroupBox.cs
Description du code
XPGroupBox.cs est un fichier du projet BrolDev.Ce fichier est situé dans /var/www/bin/sniplets/bibliobrol/broldev/src/.
Projet BrolDev : Librairie de composants réutilisables pour les applications BrolDev en CSharp.
Code source ou contenu du fichier
Code c# (XPGroupBox.cs) (485 lignes)
using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace be.gaudry.view.controls { /// <summary> /// XP styled GroupBox (expandable) /// More info : /// http://www.codeproject.com/cs/media/ExtendedGraphics.asp /// </summary> public class XPGroupBox : GroupBox { #region declarations private System.ComponentModel.IContainer components; public event EventHandler StateChanged; /// <summary> /// Collapsed (1) or expanded (0) /// </summary> public enum GroupBoxState : int { /// <summary> /// Full view /// </summary> Expanded = 0, /// <summary> /// Only the title is displayed /// </summary> Collapsed = 1 } private int headerHeight; private Rectangle headerRect; private int origHeight; private GroupBoxState state = GroupBoxState.Expanded; private System.Windows.Forms.ImageList imageList1; private Color backColor = System.Drawing.SystemColors.ControlLightLight; private Color headerForeColor = System.Drawing.SystemColors.ControlText; private Font headerFont; private Color borderColor = System.Drawing.SystemColors.ControlDarkDark; private Color headerBackColor = System.Drawing.SystemColors.Control; private Icon icon = null; private Cursor cursor; private bool canCollapse = true; private bool displayCollapseBtn = true; #endregion #region properties /// <summary> /// Get or define if the XPGroupBox can be collapsed or not /// </summary> [ Description("Get or define if the XPGroupBox can be collapsed or not"), Category("Behavior") ] public bool CanCollapse { get {return canCollapse;} set {canCollapse = value; this.Invalidate(this.headerRect, false); } }/// <summary> /// Display a button to collapse or expand the XPGroupBox /// </summary> [ Description("Display a button to collapse or expand the XPGroupBox"), Category("Behavior"), ] public bool DisplayCollapseButton { get { return displayCollapseBtn; } set { displayCollapseBtn = value; this.Invalidate(this.headerRect, false); } } /// <summary> /// Get or define the XPGroupBoxState (Expanded or not) /// </summary> [ Description("Get or define the XPGroupBoxState (Expanded or not)"), Category("Appearance"), ] public bool Expanded { get { return state.Equals(XPGroupBox.GroupBoxState.Expanded); } set { state = (value) ? GroupBoxState.Expanded : GroupBoxState.Collapsed; } } /* /// <summary> /// Obtient ou défini la couleur de fond du groupe /// </summary> [Description("Obtient ou défini la couleur du fond du groupe"), Category("Appearance"), DefaultValue(typeof(Color),"239, 243, 255")] public Color BackgroundColor { get {return backColor;} set {backColor = value; this.Invalidate(true); } } /// <summary> /// Obtient ou défini la couleur du texte de l'entête /// </summary> [Description("Obtient ou défini la couleur du texte de l'entête"), Category("Appearance"), DefaultValue(typeof(Color),"48, 72, 110")] public Color HeaderForeColor { get {return headerForeColor;} set {headerForeColor = value; this.Invalidate(this.headerRect, false); } } /// <summary> /// Otient ou défini la police de l'entête /// </summary> [Description("Obtient ou défini la police du texte de l'entête"), Category("Appearance"), DefaultValue(typeof(Font),"Trebuchet MS; 9,75pt; style=Bold")] public Font HeaderFont { get {return headerFont;} set { if (value != null) { headerFont = value; } else { headerFont = base.Font; } this.ComputeHeaderHeight(); this.Invalidate(); } } */ [Browsable(false),EditorBrowsable(EditorBrowsableState.Never)] get {return FlatStyle.Standard;} } [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] get {return null;} } /* /// <summary> /// Obtient ou défini la couleur de la bordure du contrôle /// </summary> [Description("Obtient ou défini la couleur de la bordure du contrôle"), Category("Appearance"), DefaultValue(typeof(Color),"183, 202, 234")] public Color BorderColor { get {return borderColor;} set {borderColor = value; this.Invalidate(); } } /// <summary> /// Obtient ou défini la couleur de fond de l'entête /// </summary> [Description("Obtient ou défini la couleur du fond de l'entête"), Category("Appearance"), DefaultValue(typeof(Color),"195, 214, 255")] public Color HeaderBackColor { get {return headerBackColor;} set {headerBackColor = value; this.Invalidate(this.headerRect, false); } } */ /// <summary> /// Get or define the icon witch be displayed in the title /// </summary> [ Description("Get or define the icon witch be displayed in the title"), Category("Appearance") ] public Icon Icon { get {return icon;} set { icon = value; this.Invalidate(this.headerRect, false); } } #endregion #region constructor public XPGroupBox() { this.SetStyle(ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.SupportsTransparentBackColor | ControlStyles.AllPaintingInWmPaint, true); InitializeComponent(); ComputeHeaderHeight(); this.headerFont = base.Font; // this.backColor = base.BackColor; cursor = base.Cursor; } #endregion #region public methods /// <summary> /// Expand or collapse the XPGroupBox /// </summary> /// <param name="expand">(bool) true to expand</param> public void expand(bool expand) { this.state = (expand) ? GroupBoxState.Expanded : GroupBoxState.Collapsed; ChangeState(); } #endregion #region events and private methods protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (canCollapse) { if (headerRect.Contains(this.PointToClient(MousePosition))) { cursor = this.Cursor; this.Cursor = Cursors.Hand; } else { this.Cursor = Cursors.Default; } } } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); if (this.canCollapse && headerRect.Contains(this.PointToClient(MousePosition))) { this.state = (this.state == GroupBoxState.Collapsed ? GroupBoxState.Expanded : GroupBoxState.Collapsed); ChangeState(); } } protected override void OnPaintBackground(PaintEventArgs pevent) { // base.OnPaintBackground (pevent); } protected void ChangeState() { if (this.state != GroupBoxState.Expanded) { this.origHeight = this.Height; this.Height = this.headerHeight + 1; // + 5; } else { this.Height = this.origHeight; } if (this.StateChanged != null) { this.StateChanged(this, EventArgs.Empty); } } // public GroupBoxState State { // get {return state;} // set {state = value; // ChangeState(); // } // } public override Rectangle DisplayRectangle { get { Rectangle rect = new Rectangle(1, headerHeight + 1, this.Width - 2, this.Height - headerHeight - 8); return rect; } } protected override void OnPaint(PaintEventArgs e) { headerHeight = ComputeHeaderHeight(); // // We erase the control // e.Graphics.FillRectangle(new SolidBrush(Color.Transparent), 0,0,this.Width,this.Height); GraphicsPath RREntete = this.GetRoundedRect(this.headerRect, 4F); GraphicsPath RRBackground = this.GetRoundedRect(new Rectangle(0, 0, this.Width - 1, this.Height - 5), 4F); // fill the background if state == Expanded if (this.state == GroupBoxState.Expanded) { } // paint the header of the control this.headerRect, this.headerBackColor, this.backColor, LinearGradientMode.Horizontal); e.Graphics.FillPath(b, RREntete); // add icon if exists int left = 5; if (this.icon != null) { e.Graphics.DrawIcon( this.icon, left += this.headerHeight + 5; } // add header text StringFormat sf = StringFormat.GenericTypographic; sf.LineAlignment = StringAlignment.Center; sf); sf.Dispose(); if (this.canCollapse) { // draw image according to the XPGroupBox state (expanded or not) e.Graphics.DrawImage(this.imageList1.Images[(int)state], new Point(this.Width - 24, (this.headerHeight - 16) / 2)); // draw a vertical line to separate text from the header and the state image e.Graphics.DrawLine(SystemPens.ControlLight, new Point(this.Width - 31, 1 + (this.headerHeight - 16) / 2), } } /// <summary> /// Calculate the ideal size of the header according to the used font. /// </summary> /// <returns>ideal size in pixels</returns> private int ComputeHeaderHeight() { Font font = this.headerFont; if (font == null) font = base.Font; int height = (int)(this.CreateGraphics().MeasureString("I", font).Height * 1.5F); if (height != this.headerHeight) { this.headerHeight = height; this.RecreateHandle(); } return this.headerHeight; } /// <summary> /// Clean non used ressources /// </summary> protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } #endregion #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() { // // imageList1 // this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); this.imageList1.TransparentColor = System.Drawing.Color.Magenta; } #endregion #region Code from CodeProject : http://www.codeproject.com/cs/media/ExtendedGraphics.asp private GraphicsPath GetRoundedRect(RectangleF baseRect, float radius) { // if corner radius is less than or equal to zero, // return the original rectangle if( radius<=0.0F ) { mPath.AddRectangle(baseRect); mPath.CloseFigure(); return mPath; } // if the corner radius is greater than or equal to // half the width, or height (whichever is shorter) // then return a capsule instead of a lozenge if( radius>=(Math.Min(baseRect.Width, baseRect.Height))/2.0) return GetCapsule( baseRect ); // create the arc for the rectangle sides and declare // a graphics path object for the drawing float diameter = radius * 2.0F; // top left arc path.AddArc( arc, 180, 90 ); // top right arc arc.X = baseRect.Right-diameter; path.AddArc( arc, 270, 90 ); // bottom right arc arc.Y = baseRect.Bottom-diameter; path.AddArc( arc, 0, 90 ); // bottom left arc arc.X = baseRect.Left; path.AddArc( arc, 90, 90 ); path.CloseFigure(); return path; } private GraphicsPath GetCapsule( RectangleF baseRect ) { float diameter; RectangleF arc; try { if( baseRect.Width>baseRect.Height ) { // return horizontal capsule diameter = baseRect.Height; path.AddArc( arc, 90, 180); arc.X = baseRect.Right-diameter; path.AddArc( arc, 270, 180); } else if( baseRect.Width < baseRect.Height ) { // return vertical capsule diameter = baseRect.Width; path.AddArc( arc, 180, 180 ); arc.Y = baseRect.Bottom-diameter; path.AddArc( arc, 0, 180 ); } else { // return circle path.AddEllipse( baseRect ); } } catch(Exception ex) { path.AddEllipse( baseRect ); System.Console.WriteLine(ex.Message); } finally { path.CloseFigure(); } return path; } #endregion } }
Structure et Fichiers du projet
Afficher/masquer...Icône | Nom | Taille | Modification |
Pas de sous-répertoires. | |||
Icône | Nom | Taille | Modification |
| _ | Répertoire parent | 0 octets | 1732518664 25/11/2024 08:11:04 |
Utilisation de l'explorateur de code
- Navigation :
- Un clic sur une icône de répertoire ouvre ce répertoire pour en afficher les fichiers.
- Lorsque le répertoire en cours ne contient pas de sous-répertoires il est possible de remonter vers le répertoire parent.
- La structure de répertoires en treetable (tableau en forme d'arborescence) n'est plus possibledans cette version.
- Un clic sur une icône de fichier ouvre ce fichier pour en afficher le code avec la coloration syntaxique adaptée en fonction du langage principal utilisé dans le fichier.
- Affichage :
- Il est possible de trier les répertoires ou les fichiers selon certains critères (nom, taille, date).
- Actions :
- Les actions possible sur les fichiers dépendent de vos droits d'utilisateur sur le site. Veuillez activer le mode utilisateur pour activer les actions.
Version en cache
25/11/2024 08:11:04 Cette version de la page est en cache (à la date du 25/11/2024 08:11:04) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 16/10/2009, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/cs-broldev-source-rf-view/controls//XPGroupBox.cs.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.