云南特产 健康论坛 创业论坛 一树百花 低空飞行  
             

水手

专注
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

去掉winform边框,实现最大化最小化及关闭功能

Posted on 2010-05-19 17:07  要每天开心  阅读(4611)  评论(0编辑  收藏  举报
               
  云南特产 健康论坛 创业论坛 淘宝客 低空飞行 网页目录  
               

去掉边框
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
实现最大最小关闭
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();          
}

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

private void btnMax_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
else
{
this.FormBorderStyle = FormBorderStyle.None;
this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
}
}
因为无边框后,winform无法拖动,实现拖动
-----首先在类内创建两个成员变量
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下


///---------------添加三个关于鼠标的事件
private void form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
int xOffset;
int yOffset;

if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight -
SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}

private void form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X, mouseOffset.Y);
Location = mousePos;
}
}

private void form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
     if (result == DialogResult.Yes)
     {
         e.Cancel = false;
         Application.Exit();
     }
     else
     {
         e.Cancel = true;
         this.Hide();
         this.Visible = false;
     }
}

private void ConExit_Click(object sender, EventArgs e)
{
     result=MessageBox.Show("确认退出系统?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
     Application.Exit();
}

【hbxtlhx】:
你一定要在如下的方法里添加参数来标识是不是应该真的退出程序:
private void   Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{   
     if (!this.m_allowExit)
     {
         this.WindowState = FormWindowState.Minimized;
         e.Cancel = true;           
     }
}

然后在弹出的菜单的Click事件里设置这个this.m_allowExit=true;
这样窗口就会顺利的关闭了.

【txwd0033】:
Application.Exit(true);行不?
如果不行的话设置一个变量,在formClosing中根据变量的值来设置e。Cancel的值

               
  云南特产 健康论坛 创业论坛 淘宝客 低空飞行 网页目录  
               
【hbxtlhx】:
在程序开始的时候设置this.m_allowExit=false,只有在菜单的退出事件代码里设置这个this.m_allowExit=true;就可以了.具体看你的思路了.

【lxcnn】:
可以加个全局变量判断一下是由哪里触发Closing事件,如果是关闭按钮就最小化,是右键菜单就关闭

【liutaoyue】:
/// <summary>
/// 重写窗体关闭事件
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{
this.Hide();
return;
}
base.WndProc (ref m);
}

【bejon】:
点x和使用菜单关闭程序执行不同程序

你只要在菜单那多设一个变量加以区分就OK了

               
  云南特产 健康论坛 创业论坛 淘宝客 低空飞行 网页目录  
               
             
  云南特产 健康论坛 创业论坛 一树百花 低空飞行