Added: TImageButton
This commit is contained in:
		
							parent
							
								
									a780759489
								
							
						
					
					
						commit
						f171f5f47f
					
				
							
								
								
									
										378
									
								
								2020/12/TImageButton.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										378
									
								
								2020/12/TImageButton.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,378 @@ | |||||||
|  | using System; | ||||||
|  | using System.ComponentModel; | ||||||
|  | using System.Drawing; | ||||||
|  | using System.Windows.Forms; | ||||||
|  | 
 | ||||||
|  | namespace RyzStudio.Windows.Forms | ||||||
|  | { | ||||||
|  |     public class TImageButton : System.Windows.Forms.Label | ||||||
|  |     { | ||||||
|  |         public enum TImageBoxState | ||||||
|  |         { | ||||||
|  |             Disabled = 0, | ||||||
|  |             Normal, | ||||||
|  |             Hover, | ||||||
|  |             Active | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected bool isEnabled = true; | ||||||
|  |         protected bool isHover = false; | ||||||
|  |         protected Color foreColor = Color.Black; | ||||||
|  |         protected string text; | ||||||
|  |         protected Size textSize = new Size(); | ||||||
|  |         protected DockStyle textAlign = DockStyle.Fill; | ||||||
|  |         protected TImageBoxState controlState = TImageBoxState.Normal; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public TImageButton() | ||||||
|  |         { | ||||||
|  |             this.AutoEllipsis = true; | ||||||
|  |             this.AutoSize = false; | ||||||
|  |             this.BackColor = Color.Transparent; | ||||||
|  |             //this.BackgroundImage = Properties.Resources.circle; | ||||||
|  |             this.BackgroundImageLayout = ImageLayout.Center; | ||||||
|  |             this.BorderStyle = BorderStyle.None; | ||||||
|  |             this.CausesValidation = true; | ||||||
|  |             this.DoubleBuffered = true; | ||||||
|  |             this.FlatStyle = FlatStyle.Flat; | ||||||
|  |             this.ForeColor = Color.Black; | ||||||
|  |             this.ImageAlign = ContentAlignment.MiddleCenter; | ||||||
|  |             //this.Margin = new Padding(0); | ||||||
|  |             //this.MaximumSize = new Size(135, 135); | ||||||
|  |             //this.MinimumSize = this.MaximumSize; | ||||||
|  |             //this.Padding = new Padding(0); | ||||||
|  |             //this.Size = this.MaximumSize; | ||||||
|  |             base.TextAlign = ContentAlignment.MiddleCenter; | ||||||
|  |             this.TextAlign = DockStyle.Fill; | ||||||
|  |             this.UseCompatibleTextRendering = false; | ||||||
|  |             this.UseMnemonic = true; | ||||||
|  | 
 | ||||||
|  |             this.DisabledForeColor = Color.Black; | ||||||
|  |             this.ControlState = TImageBoxState.Normal; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override bool AllowDrop { get => base.AllowDrop; set => base.AllowDrop = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new bool AutoEllipsis { get => base.AutoEllipsis; set => base.AutoEllipsis = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override Color BackColor { get => base.BackColor; set => base.BackColor = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new BorderStyle BorderStyle { get => base.BorderStyle; set => base.BorderStyle = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new bool CausesValidation { get => base.CausesValidation; set => base.CausesValidation = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; } | ||||||
|  | 
 | ||||||
|  |         //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new bool Enabled | ||||||
|  |         { | ||||||
|  |             get => isEnabled; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 isEnabled = value; | ||||||
|  | 
 | ||||||
|  |                 this.ControlState = (isEnabled ? TImageBoxState.Normal : TImageBoxState.Disabled); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new FlatStyle FlatStyle { get => base.FlatStyle; set => base.FlatStyle = value; } | ||||||
|  | 
 | ||||||
|  |         //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         //public override Font Font { get => base.Font; set => base.Font = value; } | ||||||
|  | 
 | ||||||
|  |         //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override Color ForeColor { get => foreColor; set => foreColor = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new Image Image { get => base.Image; set => base.Image = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new ContentAlignment ImageAlign { get => base.ImageAlign; set => base.ImageAlign = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new string ImageKey { get => base.ImageKey; set => base.ImageKey = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new int ImageIndex { get => base.ImageIndex; set => base.ImageIndex = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new ImageList ImageList { get => base.ImageList; set => base.ImageList = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; } | ||||||
|  | 
 | ||||||
|  |         //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         //public new Padding Margin { get => base.Margin; set => base.Margin = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new Padding Padding { get => base.Padding; set => base.Padding = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new object Tag { get => base.Tag; set => base.Tag = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         //public new string Text { get => base.Text; set => base.Text = value; } | ||||||
|  |         public new string Text { get => base.Text; set => base.Text = string.Empty; } | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance")] | ||||||
|  |         public string Text2 | ||||||
|  |         { | ||||||
|  |             get => text; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 base.Text = string.Empty; | ||||||
|  | 
 | ||||||
|  |                 text = value ?? string.Empty; | ||||||
|  |                 textSize = TextRenderer.MeasureText(text, this.Font); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         //public new ContentAlignment TextAlign { get => base.TextAlign; set => base.TextAlign = value; } | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance")] | ||||||
|  |         public new DockStyle TextAlign { get => textAlign; set => textAlign = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new bool UseCompatibleTextRendering { get => base.UseCompatibleTextRendering; set => base.UseCompatibleTextRendering = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new bool UseMnemonic { get => base.UseMnemonic; set => base.UseMnemonic = value; } | ||||||
|  | 
 | ||||||
|  |         [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] | ||||||
|  |         public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; } | ||||||
|  | 
 | ||||||
|  |         protected override void OnPaint(PaintEventArgs e) | ||||||
|  |         { | ||||||
|  |             base.OnPaint(e); | ||||||
|  | 
 | ||||||
|  |             Graphics g = e.Graphics; | ||||||
|  | 
 | ||||||
|  |             Point pos = calcTextPosition(); | ||||||
|  | 
 | ||||||
|  |             TextRenderer.DrawText(e.Graphics, this.Text2, this.Font, pos, base.ForeColor); | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnClick(EventArgs e) | ||||||
|  |         { | ||||||
|  |             if (this.Enabled || this.AllowClickOnDisabled) | ||||||
|  |             { | ||||||
|  |                 base.OnClick(e); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnDoubleClick(EventArgs e) | ||||||
|  |         { | ||||||
|  |             if (this.Enabled || this.AllowClickOnDisabled) | ||||||
|  |             { | ||||||
|  |                 base.OnDoubleClick(e); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnFontChanged(EventArgs e) | ||||||
|  |         { | ||||||
|  |             base.OnFontChanged(e); | ||||||
|  | 
 | ||||||
|  |             this.Text2 = this.Text2; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnMouseClick(MouseEventArgs e) | ||||||
|  |         { | ||||||
|  |             if (!this.Enabled && !this.AllowClickOnDisabled) return; | ||||||
|  |             if (e.Button != MouseButtons.Left) return; | ||||||
|  | 
 | ||||||
|  |             base.OnMouseClick(e); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnMouseDoubleClick(MouseEventArgs e) | ||||||
|  |         { | ||||||
|  |             if (!this.Enabled && !this.AllowClickOnDisabled) return; | ||||||
|  |             if (e.Button != MouseButtons.Left) return; | ||||||
|  | 
 | ||||||
|  |             base.OnMouseDoubleClick(e); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnMouseDown(MouseEventArgs e) | ||||||
|  |         { | ||||||
|  |             if (e.Button != MouseButtons.Left) return; | ||||||
|  | 
 | ||||||
|  |             this.ControlState = (this.Enabled ? TImageBoxState.Active : TImageBoxState.Disabled); | ||||||
|  | 
 | ||||||
|  |             base.OnMouseDown(e); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnMouseEnter(EventArgs e) | ||||||
|  |         { | ||||||
|  |             isHover = true; | ||||||
|  | 
 | ||||||
|  |             this.ControlState = (this.Enabled ? (isHover ? TImageBoxState.Hover : TImageBoxState.Normal) : TImageBoxState.Disabled); | ||||||
|  | 
 | ||||||
|  |             base.OnMouseEnter(e); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnMouseLeave(EventArgs e) | ||||||
|  |         { | ||||||
|  |             isHover = false; | ||||||
|  | 
 | ||||||
|  |             this.ControlState = (this.Enabled ? (isHover ? TImageBoxState.Hover : TImageBoxState.Normal) : TImageBoxState.Disabled); | ||||||
|  | 
 | ||||||
|  |             base.OnMouseLeave(e); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnMouseUp(MouseEventArgs e) | ||||||
|  |         { | ||||||
|  |             this.ControlState = (this.Enabled ? (isHover ? TImageBoxState.Hover : TImageBoxState.Normal) : TImageBoxState.Disabled); | ||||||
|  | 
 | ||||||
|  |             base.OnMouseUp(e); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected override void OnCreateControl() | ||||||
|  |         { | ||||||
|  |             base.OnCreateControl(); | ||||||
|  | 
 | ||||||
|  |             this.ControlState = this.ControlState; | ||||||
|  |             this.AutoSize = false; | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Background)")] | ||||||
|  |         public bool UseBackImage { get; set; } = true; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Foreground)")] | ||||||
|  |         public bool UseForeImage { get; set; } = false; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance")] | ||||||
|  |         public Color DisabledForeColor { get; set; } | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance")] | ||||||
|  |         public int TextOffset { get; set; } = 0; | ||||||
|  | 
 | ||||||
|  |         [Category("Behavior")] | ||||||
|  |         public bool AllowClickOnDisabled { get; set; } = false; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Foreground)")] | ||||||
|  |         public Image NormalImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Foreground)")] | ||||||
|  |         public Image HoverImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Foreground)")] | ||||||
|  |         public Image ActiveImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Foreground)")] | ||||||
|  |         public Image DisabledImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Background)")] | ||||||
|  |         public Image NormalBackImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Background)")] | ||||||
|  |         public Image HoverBackImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Background)")] | ||||||
|  |         public Image ActiveBackImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  |         [Category("Appearance (Background)")] | ||||||
|  |         public Image DisabledBackImage { get; set; } = null; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         protected TImageBoxState ControlState | ||||||
|  |         { | ||||||
|  |             get => controlState; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 controlState = value; | ||||||
|  | 
 | ||||||
|  |                 switch (controlState) | ||||||
|  |                 { | ||||||
|  |                     case TImageBoxState.Disabled: | ||||||
|  |                         if (this.UseBackImage) this.BackgroundImage = this.DisabledBackImage; | ||||||
|  |                         if (this.UseForeImage) this.Image = this.DisabledImage; | ||||||
|  |                         base.ForeColor = this.DisabledForeColor; | ||||||
|  | 
 | ||||||
|  |                         break; | ||||||
|  |                     case TImageBoxState.Normal: | ||||||
|  |                         if (this.UseBackImage) this.BackgroundImage = this.NormalBackImage; | ||||||
|  |                         if (this.UseForeImage) this.Image = this.NormalImage; | ||||||
|  |                         base.ForeColor = this.ForeColor; | ||||||
|  | 
 | ||||||
|  |                         break; | ||||||
|  |                     case TImageBoxState.Hover: | ||||||
|  |                         if (this.UseBackImage) this.BackgroundImage = this.HoverBackImage; | ||||||
|  |                         if (this.UseForeImage) this.Image = this.HoverImage; | ||||||
|  |                         base.ForeColor = this.ForeColor; | ||||||
|  | 
 | ||||||
|  |                         break; | ||||||
|  |                     case TImageBoxState.Active: | ||||||
|  |                         if (this.UseBackImage) this.BackgroundImage = this.ActiveBackImage; | ||||||
|  |                         if (this.UseForeImage) this.Image = this.ActiveImage; | ||||||
|  |                         base.ForeColor = this.ForeColor; | ||||||
|  | 
 | ||||||
|  |                         break; | ||||||
|  |                     default: break; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected Point calcTextPosition() | ||||||
|  |         { | ||||||
|  |             Point rs = new Point(); | ||||||
|  | 
 | ||||||
|  |             switch (this.TextAlign) | ||||||
|  |             { | ||||||
|  |                 case DockStyle.Top: | ||||||
|  |                     rs.X = ((this.DisplayRectangle.Width - textSize.Width) / 2); | ||||||
|  |                     rs.Y = ((this.DisplayRectangle.Height / 2) - textSize.Height - this.TextOffset); | ||||||
|  |                     break; | ||||||
|  |                 case DockStyle.Bottom: | ||||||
|  |                     rs.X = ((this.DisplayRectangle.Width - textSize.Width) / 2); | ||||||
|  |                     rs.Y = ((this.DisplayRectangle.Height / 2) + this.TextOffset); | ||||||
|  |                     break; | ||||||
|  |                 case DockStyle.Left: | ||||||
|  |                     rs.X = ((this.DisplayRectangle.Width / 2) - textSize.Width - this.TextOffset); | ||||||
|  |                     rs.Y = ((this.DisplayRectangle.Height - textSize.Height) / 2); | ||||||
|  |                     break; | ||||||
|  |                 case DockStyle.Right: | ||||||
|  |                     rs.X = ((this.DisplayRectangle.Width / 2) + this.TextOffset); | ||||||
|  |                     rs.Y = ((this.DisplayRectangle.Height - textSize.Height) / 2); | ||||||
|  |                     break; | ||||||
|  |                 case DockStyle.Fill: | ||||||
|  |                 case DockStyle.None: | ||||||
|  |                 default: | ||||||
|  |                     rs.X = ((this.DisplayRectangle.Width - textSize.Width) / 2); | ||||||
|  |                     rs.Y = ((this.DisplayRectangle.Height - textSize.Height) / 2); | ||||||
|  |                     break; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return rs; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Ray
						Ray