前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
官网:https://www.hzhcontrols.cn
GitHub:https://github.com/kwwwvagaa/NetWinformControl
如果觉得写的还行,请点个 star 支持一下吧
目录
c#Winform自定义控件-目录_c#winform自定义控件-有图标的按钮-CSDN博客
准备工作
这个窗体继承子基类窗体FrmBase,如果你对FrmBase还不了解,请移步 (十七)c#Winform自定义控件-基类窗体 查看
开始
添加一个Form,命名FrmWaiting,继承自FrmBase
代码不多,直接上全部代码
// 版权所有 黄正辉 交流群:568015492 QQ:623128629
// 文件名称:FrmWaiting.cs
// 创建日期:2019-08-15 16:05:09
// 功能描述:FrmWaiting
// 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace HZH_Controls.Forms
{
public partial class FrmWaiting : FrmBase
{
public string Msg { get { return label2.Text; } set { label2.Text = value; } }
public FrmWaiting()
{
base.SetStyle(ControlStyles.UserPaint, true);
base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
base.SetStyle(ControlStyles.DoubleBuffer, true);
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (this.label1.ImageIndex == this.imageList1.Images.Count - 1)
this.label1.ImageIndex = 0;
else
this.label1.ImageIndex++;
}
private void FrmWaiting_VisibleChanged(object sender, EventArgs e)
{
//this.timer1.Enabled = this.Visible;
}
protected override void DoEsc()
{
}
private void timer2_Tick(object sender, EventArgs e)
{
base.Opacity = 1.0;
this.timer2.Enabled = false;
}
public void ShowForm(int intSleep = 1)
{
base.Opacity = 0.0;
if (intSleep <= 0)
{
intSleep = 1;
}
base.Show();
this.timer2.Interval = intSleep;
this.timer2.Enabled = true;
}
}
}
namespace HZH_Controls.Forms
{
partial class FrmWaiting
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmWaiting));
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.label1 = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.label2 = new System.Windows.Forms.Label();
this.timer2 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.White;
this.imageList1.Images.SetKeyName(0, "0.png");
this.imageList1.Images.SetKeyName(1, "1.png");
this.imageList1.Images.SetKeyName(2, "2.png");
this.imageList1.Images.SetKeyName(3, "3.png");
this.imageList1.Images.SetKeyName(4, "4.png");
this.imageList1.Images.SetKeyName(5, "5.png");
this.imageList1.Images.SetKeyName(6, "6.png");
this.imageList1.Images.SetKeyName(7, "7.png");
this.imageList1.Images.SetKeyName(8, "8.png");
this.imageList1.Images.SetKeyName(9, "9.png");
this.imageList1.Images.SetKeyName(10, "10.png");
this.imageList1.Images.SetKeyName(11, "11.png");
this.imageList1.Images.SetKeyName(12, "12.png");
this.imageList1.Images.SetKeyName(13, "13.png");
this.imageList1.Images.SetKeyName(14, "14.png");
this.imageList1.Images.SetKeyName(15, "15.png");
this.imageList1.Images.SetKeyName(16, "16.png");
this.imageList1.Images.SetKeyName(17, "17.png");
this.imageList1.Images.SetKeyName(18, "18.png");
this.imageList1.Images.SetKeyName(19, "19.png");
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Top;
this.label1.Image = global::HZH_Controls.Properties.Resources.loading;
this.label1.Location = new System.Drawing.Point(0, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(276, 196);
this.label1.TabIndex = 0;
//
// timer1
//
this.timer1.Interval = 20;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Top;
this.label2.Font = new System.Drawing.Font("微软雅黑", 12F);
this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.label2.Location = new System.Drawing.Point(0, 196);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(276, 30);
this.label2.TabIndex = 1;
this.label2.Text = "处理正在进行中,请稍候...";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// timer2
//
this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
//
// FrmWaiting
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247)))));
this.ClientSize = new System.Drawing.Size(276, 244);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.IsFullSize = false;
this.Name = "FrmWaiting";
this.Opacity = 0D;
this.RegionRadius = 20;
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.Text = "";
this.TopMost = true;
this.TransparencyKey = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247)))));
this.VisibleChanged += new System.EventHandler(this.FrmWaiting_VisibleChanged);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Timer timer2;
}
}
主要就是现实一个gif图片和一个文本
用处及效果
用途:一般用在多线程耗时操作时等待显示
效果: