今天下午程序写完,有些时间就搞下界面美化,做个无框窗体。首先把窗体的FormBorderStyle设置为None,就变成无框的啦,不过你会发现这样窗体上就没有原来的最大最小化和关闭按钮了哦,所以要自己补上去。弄个panel放上去,置顶,可以设置panel的背景色和背景图片什么的,详细布局就不赘述啦,见下图,主要是再放三个小panel进去,用来做最小化、最大化、关闭按钮。下面给出三个panel的事件代码。

关闭代码

        private void pnlFormClose_MouseClick(object sender, MouseEventArgs e)
{
DialogResult result = MessageBox.Show("是否退出?", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
//this.Dispose();
Application.Exit();
}
}

最下化代码

        private void pnlFormMin_MouseClick(object sender, MouseEventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}

这里最小化后可以加入最小化到桌面右下角,http://www.cnblogs.com/wuyouyu/p/3356303.html里已经写了相应代码。

最大化代码,这里窗体正常状态点击则最大化,最大化状态点击则变为常态

        //最大化还原切换
private bool max = false;
private void pnlFormMax_MouseClick(object sender, MouseEventArgs e)
{
if (max)
{
this.WindowState = FormWindowState.Normal;
max = false;
}
else
{
this.WindowState = FormWindowState.Maximized;
max = true;
}
}

最大化后,可以将最大化图片切换下,加句 this.pnlFormMax.BackgroundImage = Properties.Resources.要切换的图片名;

这里说明下BackgroundImage图片导入的时候,有本地资源和项目资源文件两个选项,后者会生成Resources文件夹,存放导入的文件,否则就得写图片的物理地址了。

三个按钮写完,基本工作还是没有结束,运行的时候会发现这个窗体不能拖动,要补充窗体可拖动代码,

//窗体拖动
private Point mousePoint = new Point();
private void pnlCloseBar_MouseDown(object sender, MouseEventArgs e)
{
base.OnMouseDown(e);
this.mousePoint.X = e.X;
this.mousePoint.Y = e.Y;
} private void pnlCloseBar_MouseMove(object sender, MouseEventArgs e)
{
base.OnMouseMove(e);
if (e.Button == MouseButtons.Left)
{
this.Top = Control.MousePosition.Y - mousePoint.Y;
this.Left = Control.MousePosition.X - mousePoint.X;
}
}

到此基本工作做完。

拓展:1、可以加入鼠标经过三个小panel时的效果,分别写MouseDown、MouseEnter、MouseLeave、MouseUp事件,切换下图片就行了。

        private void pnlFormMax_MouseLeave(object sender, EventArgs e)
{
if (!max)
{
this.pnlFormMax.BackgroundImage = Properties.Resources.btn_FrmMax_Normal;
}
else
{
this.pnlFormMax.BackgroundImage = Properties.Resources.btn_FrmRestore_Normal;
}
}

2、可以加入双击窗体上边框,窗体最大化效果等。

3、可以在右上角加入一个小panel作为设置按钮,用户可以自定义皮肤,窗体颜色,或者加入背景图片等。

做个无边框winform窗体,并美化界面的更多相关文章

  1. C# 无边框异型窗体制作

    我是一个C#的初学者 只要涉及到windows窗体编程 都希望窗体的外观比较好看 不是系统默认的那样 对于C# 更改窗体外观感觉并不那么轻松 更改窗体外观涉及到使用GDI+ 我所知道的有两种方法: 有 ...

  2. C#自定义无边框MessageBox窗体

    C#自定义无边框MessageBox窗体 本例子中制作一个无边框的MessageBox窗体 展示效果: 窗体设计 1.添加一个窗体继承原生Form public partial class Messa ...

  3. C# .net WPF无边框移动窗体

    转自 http://download.csdn.net/detail/xiang348352/3095084 WPF无边框移动窗体,先在<Window>里添加 MouseLeftButto ...

  4. Qt中实现无边框的窗体

    1 自定义窗体类继承自QWidget 2 在构造函数中设置无边框效果 setWindowFlags(Qt::FramelessWindowHint);//无边框 setAttribute(Qt::WA ...

  5. WPF无边框移动窗体

    WPF无边框移动窗体,先在<Window>里添加 MouseLeftButtonDown=”Window_MouseLeftButtonDown” 然后导航到事件,在事件里添加 if (e ...

  6. winform学习(9)无边框拖动窗体

    去除边框 选中窗体,在属性中找到FormBorderStyle,设置为None 实现无边框拖动 [DllImport("user32.dll")]        public st ...

  7. WPF 无边框透明窗体

    WindowStyle="None"--无边框,如果需要其它按钮,如缩小.放大.收缩.关闭按钮,可以自定义 AllowsTransparency="True"- ...

  8. WinForm窗体淡入效果界面的简单实现方法

    WinForm窗体淡入效果主要使用到控件的Opacity属性 首先在WinForm窗体中拖入一个Timer控件,然后再Timer控件的Tick事件添加如下代码: private void timer1 ...

  9. WinForm - 窗体淡入效果界面的简单实现方法

    WinForm窗体淡入效果主要使用到控件的Opacity属性 首先在WinForm窗体中拖入一个Timer控件,然后再Timer控件的Tick事件添加如下代码: private void timer1 ...

随机推荐

  1. mybatis的$存在安全问题,为什么又不得不用?

    1.mybatis的官网关于$和#的字符串替换符号区别描述如下: http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Parameters 上面的意 ...

  2. 第三步 用Jena自定义完成数据库到RDF的映射

    第三步 用Jena自定义完成数据库到RDF的映射 2013年10月17日 8:53:27 这一步用Jena编程,终于能做点有技术含量的事情了.这个工作计划本周内完成,下周一好给老师一个交待. 目标:把 ...

  3. oracle 日期字段的处理

    a. oracle plsql 如何查询两个间隔日期之间的数据 1) 方法一:Select * from Tables where time >= to_date('2013-01-02 19: ...

  4. Oracle—用户管理的完全恢复(一)

    一.分类 可以分为在非归档模式下和归档模式下的完全恢复,完全恢复主要是针对归档模式下的,在非归档模式下很难做到完全恢复,除非是在做恢复时,联机重做日志还没有被重写. 二.非归档的有关性质 1.在非归档 ...

  5. 理解 MEF

    1.它解决什么问题? 考虑下面的需求,甲程序员对外暴露接口,内部提供实现.乙程序员使用甲提供的接口,根据面向接口编程的原则,乙关联一个接口类型的引用.正常情况下,乙要使用甲的实现,必须实例化一个具体对 ...

  6. Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍

    本文主要内容: 1.FTP服务端部署---- 基于Android中SwiFTP开源软件介绍: 2.FTP客户端部署 --- 基于ftp4j开源jar包的客户端开发 : 3.使用步骤 --- 如何测试我 ...

  7. Android 接收短信

    启动程序时启动一个service,在service里注册接收短信的广播,当手机收到短信里,打印出短信内容跟电话号码. package com.lmy.SmsListener; import andro ...

  8. docker daemonize sshd service

    # 第一个-d表示让容器在后台运行 # 末尾的-D表示启动ssh的daemon模式,不然容器启动后立刻就变为停止状态了 docker run -d NAME/VERSION /etc/init.d/s ...

  9. Jquery获得控件值的方法

    一 Jquery获得服务器控件值的方法 由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,google了下,总结有以下3种方法: 服务器控件代码:<a ...

  10. 纯js写“运动”框架

    所谓“运动”不一定真的是运动,在连续的一段时间内改变某一样式都可以成为“运动”. 先写几个会用到的函数 //获取某一元素的指定样式 function getstyle (element, target ...