无边框窗体、用户控件、Timer控件

一、无边框窗体

1 最大化、最小化以及关闭按钮制作
实际上就是更换点击前、指向时、点击时的图片

(1)将图片放在该文件夹的Debug中,
获取图片的路径
Application.StartupPath + "\图片名.类型"
(2)若是放在该文件夹的中,
Application.StartupPath + "\..\..\images\图片名.类型"

..文件夹名称... 向上翻一个文件夹,上面的第一个是转义

 pictureBox2.BackgroundImage = Image.FromFile(Application.StartupPath + "\1.png");

2 窗体动起来
调用窗体移动的API,如果有其它控件覆盖了窗体,那么写好鼠标按下的事件委 
托就可以了

复制代码
//窗体移动API
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int IParam);
        public const int WM_SYSCOMMAND = 0x0112;
        public const int SC_MOVE = 0xF010;
        public const int HTCAPTION = 0x0002;
        [DllImport("user32")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
        private const int WM_SETREDRAW = 0xB;


//记住:在窗体的MouseDown事件中 一定要选择Form1_MouseDown
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (this.WindowState == FormWindowState.Normal)
            {
                ReleaseCapture();
                SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
        }
复制代码

3 让窗体有阴影

复制代码
//阴影
//写在构造函数上面
private const int CS_DropSHADOW = 0x20000; private const int GCL_STYLE = (-26); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int GetClassLong(IntPtr hwnd, int nIndex); //写在构造函数中 SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DropSHADOW);
复制代码

二、后台创建控件

(1)创建

复制代码
            PictureBox p = new PictureBox();//创建图片控件,实例化图片控件
            //设置图片
p.BackgroundImage = Image.FromFile(Application.StartupPath + "\dota_img5.jpg"); p.BackgroundImageLayout = ImageLayout.Stretch; TextBox tb = new TextBox();//创建textBox控件,实例化 flowLayoutPanel1.Controls.Add(p);//放入流式布局的集合中 flowLayoutPanel1.Controls.Add(tb);
复制代码

(2)更改控件属性

复制代码
          foreach (Control ct in flowLayoutPanel1.Controls)
            {
                if (ct is TextBox)
                {
                    ((TextBox)ct).Text = "123123";               
                }  
            }
复制代码

三、用户控件
1 是由其它控件所组成的一种用户自定义控件
用户控件的主体与Panel相似,但是它却又是独立的一个类
2 创建
新建项--用户控件--命名(当成一个panel使用)--放入其他控件,所有内部 
的控件访问权限都要修改。
创建完成后显示在工具箱。
3 使用
实例化 yonghu yh=new yonghu();//yonghu是我给我创建的这个起的名字
赋值 yh.textBox1.Text="";
放入流式布局
4 可以给用户控件及其中的控件加上鼠标事件
四、timer在组件里:
Enabled - 此控件是否启用
Interval - 间隔时间,毫秒
Tick事件 - 间隔指定时间后要执行的代码段
timer就是个线程,这个线程默认可以跨线程访问对象

原文地址:https://www.cnblogs.com/xtq0313/p/5918590.html