1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.ComponentModel.Design;
using System.Windows.Forms.Design;
namespace MonCollapsiblePanel
{
[Designer(typeof(MonCollapsiblePanelDesigner))]
public partial class MonCollapsiblePanel: UserControl
{
#region Properties
private ImageList m_ImageList = null;
[Category("A moi"), Browsable(true), Description("ImageList qui doit contenir les 2 images (plus et -) utilisées pour le control")]
public ImageList ImageList
{
get
{
return m_ImageList;
}
set
{
m_ImageList = value;
Refresh();
}
}
private Image m_HeaderImage = null;
[Category("A moi"), Browsable(true), Description("Image qui représente le contenu du Panel personnalisé")]
public Image HeaderImage
{
get { return m_HeaderImage; }
set
{
m_HeaderImage = value;
Refresh();
}
}
private Color m_HeaderTextColor = SystemColors.ControlText;
[Category("A moi"), Browsable(true), Description("Couleur du text du bouton")]
public Color HeaderTextColor
{
get { return m_HeaderTextColor; }
set
{
m_HeaderTextColor = value;
Refresh();
}
}
private String m_HeaderText = String.Empty;
[Category("A moi"), Browsable(true), Description("Text du bouton")]
public String HeaderText
{
get { return m_HeaderText; }
set
{
m_HeaderText = value;
Refresh();
}
}
private bool m_Collapsed = false;
[Category("A moi"), Browsable(true), Description("Indique si le panel est collapsé ou étendu.")]
public bool Collapse
{
get { return m_Collapsed; }
set
{
m_Collapsed = value;
CollapseOrExpand();
Refresh();
}
}
// !! important !! pour rendre la zone client et son contenu visible en RUN
[Category("A moi"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel WorkingArea
{
get
{
return this.panelClient;
}
}
#endregion
public MonCollapsiblePanel()
{
InitializeComponent();
ButtonHeader.Dock = DockStyle.Top;
ButtonHeader.FlatStyle = FlatStyle.Flat;
ButtonHeader.FlatAppearance.MouseOverBackColor = Color.White;
ButtonHeader.FlatAppearance.BorderSize = 0;
ButtonHeader.BackgroundImageLayout = ImageLayout.None;
ButtonHeader.ImageAlign = ContentAlignment.MiddleRight;
ButtonHeader.TextImageRelation = TextImageRelation.Overlay;
ButtonHeader.TabStop = false;
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
ButtonHeader.ForeColor = m_HeaderTextColor;
if (string.IsNullOrEmpty(m_HeaderText)) m_HeaderText = base.Name.ToString();
ButtonHeader.Text = m_HeaderText;
ButtonHeader.ImageList = m_ImageList;
ButtonHeader.BackgroundImage = m_HeaderImage;
if (m_HeaderImage != null)
ButtonHeader.Height = ButtonHeader.BackgroundImage.Height;
else
ButtonHeader.Height = 32;
if (m_ImageList != null)
{
if (m_Collapsed)
ButtonHeader.ImageIndex = 0;
else
ButtonHeader.ImageIndex = 1;
}
else
ButtonHeader.Image = null;
}
private void ButtonHeader_Click(object sender, EventArgs e)
{
m_Collapsed = !m_Collapsed;
CollapseOrExpand();
}
private void CollapseOrExpand()
{
if (m_Collapsed)
{
base.Height = ButtonHeader.Height;
}
else
{
base.Height = 500;
}
}
}
public class MonCollapsiblePanelDesigner : ParentControlDesigner
{
public override void Initialize(System.ComponentModel.IComponent component)
{
base.Initialize(component);
if (this.Control is MonCollapsiblePanel)
{
this.EnableDesignMode(((MonCollapsiblePanel)this.Control).WorkingArea, "WorkingArea");
}
}
}
} |
Partager