4 * This software is distributed under a BSD-style license.
\r
5 * See license.txt for more information.
\r
9 using System.Collections.Generic;
\r
10 using System.ComponentModel;
\r
11 using System.Drawing;
\r
14 using System.Windows.Forms;
\r
15 using System.Drawing.Drawing2D;
\r
19 public partial class BitSwitch : UserControl
\r
22 private bool isExponential;
\r
23 private static Bitmap normal;
\r
24 private static Bitmap exponent;
\r
25 private static Bitmap hover;
\r
27 [Category("プロパティ変更")]
\r
28 public event System.EventHandler StateChanged;
\r
32 [DefaultValue(typeof(bool), "True")]
\r
35 get { return state; }
\r
38 SetStateWithoutEvent(value);
\r
39 if (StateChanged != null)
\r
41 StateChanged(this, new EventArgs());
\r
47 [DefaultValue(typeof(Color), "LightSteelBlue")]
\r
48 public Color BorderColor
\r
54 public bool IsExponential
\r
58 return isExponential;
\r
62 isExponential = value;
\r
63 UpdateBackgroundImage();
\r
69 InitializeComponent();
\r
71 if (BorderColor.IsEmpty)
\r
73 BorderColor = Color.FromArgb(0xD5, 0xDF, 0xE5);
\r
75 UpdateBackgroundImage();
\r
78 private void CreateNormalBackgroundImage()
\r
80 if (normal is Bitmap && normal.Size == Size)
\r
84 normal = CreateBackGroundImage(Color.White, Color.Lavender,
\r
85 Color.Gainsboro, Color.Lavender);
\r
88 private void CreateHoverBackgroundImage()
\r
90 if (hover is Bitmap && hover.Size == Size)
\r
94 hover = CreateBackGroundImage(Color.LemonChiffon, Color.Gold,
\r
95 Color.Orange, Color.DarkOrange);
\r
98 private void CreateExponentBackgroundImage()
\r
100 if (exponent is Bitmap && exponent.Size == Size)
\r
104 exponent = CreateBackGroundImage(Color.LemonChiffon, Color.Bisque,
\r
105 Color.NavajoWhite, Color.Bisque);
\r
108 private Bitmap CreateBackGroundImage(
\r
109 Color hilight, Color light, Color face, Color dark)
\r
111 Bitmap bmp = new Bitmap(Width, Height);
\r
112 Graphics g = Graphics.FromImage(bmp);
\r
113 int border = (int)(Height * 0.48);
\r
114 Rectangle upper = new Rectangle(0, 0, Width, border);
\r
115 Rectangle lower = new Rectangle(0, border, Width, Height);
\r
116 LinearGradientBrush brushL =
\r
117 new LinearGradientBrush(upper, hilight, light,
\r
118 LinearGradientMode.Vertical);
\r
119 LinearGradientBrush brushD =
\r
120 new LinearGradientBrush(lower, face, dark,
\r
121 LinearGradientMode.Vertical);
\r
122 Pen edge = new Pen(hilight, 1);
\r
123 g.FillRectangle(brushL, upper);
\r
124 g.FillRectangle(brushD, lower);
\r
125 g.DrawRectangle(edge, 1, 1, Width - 1, Height - 3);
\r
133 private void label_Click(object sender, EventArgs e)
\r
139 private void label_MouseLeave(object sender, EventArgs e)
\r
141 BackgroundImage = IsExponential? exponent : normal;
\r
145 private void label_MouseEnter(object sender, EventArgs e)
\r
147 BackgroundImage = hover;
\r
151 private void label_Paint(object sender, PaintEventArgs e)
\r
155 e.Graphics.FillRectangle(
\r
156 Brushes.LightGray, 0, 0, Width, Height);
\r
158 using (Pen p = new Pen(BorderColor, 1))
\r
160 int width = Tag != null ? Width - 1 : Width;
\r
161 e.Graphics.DrawRectangle(p, 0, 0, width, Height - 1);
\r
165 public void SetStateWithoutEvent(bool state)
\r
167 this.state = state;
\r
168 label.Text = state ? "1" : "0";
\r
169 label.ForeColor = state ? Color.DarkSlateGray : Color.SteelBlue;
\r
170 label.Font = new Font(label.Font,
\r
171 state ? FontStyle.Bold : FontStyle.Regular);
\r
174 private void BitSwitch_SizeChanged(object sender, EventArgs e)
\r
176 UpdateBackgroundImage();
\r
179 private void UpdateBackgroundImage()
\r
181 bool mouseOver = BackgroundImage == hover;
\r
182 CreateNormalBackgroundImage();
\r
183 CreateHoverBackgroundImage();
\r
184 CreateExponentBackgroundImage();
\r
187 BackgroundImage = IsExponential ? exponent : normal;
\r
191 BackgroundImage = hover;
\r