标题栏外区域拖动窗体
生活随笔
收集整理的這篇文章主要介紹了
标题栏外区域拖动窗体
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們知道對窗體的拖動只需要點住標題欄,拖動鼠標就可以了.但有些時候我們想在窗體的標題欄外的區域實行拖動窗體的操作.這時就要需要我們自已寫些代碼了,下面是我的做法,供大家參觀.
新建一個窗體FORM1,并放入兩個RADIOBUTTON控件,第一個是確定是否窗體拖動,第三個是確定是否指定某一區域進行窗體拖動.
以下是窗體代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
namespace WindowsApplication1
{
partial class Form1 : Form
{
Point _StartXY; //鼠標按下的位置
bool _MoveDown=false; //鼠標是不是按下了
//指定一個區域,好寫字在ONPAINT中
Rectangle _rec = new Rectangle(50, 50, 70, 70);
public Form1()
{
InitializeComponent();
}
protected override void OnMouseDown(MouseEventArgs e)
{
//要移動嗎?由按下鼠標(onMouseDown)確定哈
bool OktoMove=false;
base.OnMouseDown(e);
if(this.radioButton1.Checked)
{
OktoMove=true;
}
else
{
//如果按下鼠標的點坐標在_rec指定的區域內
//那么我們同意移動窗體操作哈。
if(this._rec.Contains(this.PointToClient(MousePosition)))
{
OktoMove = true;
}
}
//如果同意移動,就把按下鼠標一瞬的坐標給_StartXY
//并同意按著鼠標移動。
if(OktoMove==true)
{
//把當前的鼠標位置賦給變量
_StartXY = MousePosition;
_MoveDown = true;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
//如果同意按著鼠標移動,就把移動的量給變量
//以便窗體按你的量移動。
if (_MoveDown)
{
int Xdiff,Ydiff;
Xdiff = MousePosition.X - _StartXY.X;
Ydiff = MousePosition.Y - _StartXY.Y;
//改變窗體位置
this.Left = this.Left + Xdiff;
this.Top = this.Top + Ydiff;
//把新位置給_StartXY變量了哈
_StartXY = MousePosition;
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
_MoveDown = false;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//要一支新畫筆,向NET要哈
SolidBrush b = new SolidBrush(Color.Red);
if (radioButton2.Checked)
{
//填充_rec的區域,筆的顏色是紅的哈
e.Graphics.FillRectangle(b, _rec);
//改變筆的顏色
b.Color = Color.White;
//重新定義一個區域,這個區域其實就是_rec變量的區域
RectangleF recF = new RectangleF(_rec.X,
_rec.Y,
_rec.Width,
_rec.Height);
//在這個區域寫幾個字呢
e.Graphics.DrawString("click on me drag", Font, b, recF);
}
else
{
//如果不同意用區域改變窗體位置,就把背景設為窗體的
//顏色,免得影響視覺。
b.Color = BackColor;
//把這個區域涂了
e.Graphics.FillRectangle(b, _rec);
}
b.Dispose();//把筆丟了,免得占我地方
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
this.Invalidate(this._rec);//使_rec指定的地方無效了
}
}
}
新建一個窗體FORM1,并放入兩個RADIOBUTTON控件,第一個是確定是否窗體拖動,第三個是確定是否指定某一區域進行窗體拖動.
以下是窗體代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
namespace WindowsApplication1
{
partial class Form1 : Form
{
Point _StartXY; //鼠標按下的位置
bool _MoveDown=false; //鼠標是不是按下了
//指定一個區域,好寫字在ONPAINT中
Rectangle _rec = new Rectangle(50, 50, 70, 70);
public Form1()
{
InitializeComponent();
}
protected override void OnMouseDown(MouseEventArgs e)
{
//要移動嗎?由按下鼠標(onMouseDown)確定哈
bool OktoMove=false;
base.OnMouseDown(e);
if(this.radioButton1.Checked)
{
OktoMove=true;
}
else
{
//如果按下鼠標的點坐標在_rec指定的區域內
//那么我們同意移動窗體操作哈。
if(this._rec.Contains(this.PointToClient(MousePosition)))
{
OktoMove = true;
}
}
//如果同意移動,就把按下鼠標一瞬的坐標給_StartXY
//并同意按著鼠標移動。
if(OktoMove==true)
{
//把當前的鼠標位置賦給變量
_StartXY = MousePosition;
_MoveDown = true;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
//如果同意按著鼠標移動,就把移動的量給變量
//以便窗體按你的量移動。
if (_MoveDown)
{
int Xdiff,Ydiff;
Xdiff = MousePosition.X - _StartXY.X;
Ydiff = MousePosition.Y - _StartXY.Y;
//改變窗體位置
this.Left = this.Left + Xdiff;
this.Top = this.Top + Ydiff;
//把新位置給_StartXY變量了哈
_StartXY = MousePosition;
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
_MoveDown = false;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//要一支新畫筆,向NET要哈
SolidBrush b = new SolidBrush(Color.Red);
if (radioButton2.Checked)
{
//填充_rec的區域,筆的顏色是紅的哈
e.Graphics.FillRectangle(b, _rec);
//改變筆的顏色
b.Color = Color.White;
//重新定義一個區域,這個區域其實就是_rec變量的區域
RectangleF recF = new RectangleF(_rec.X,
_rec.Y,
_rec.Width,
_rec.Height);
//在這個區域寫幾個字呢
e.Graphics.DrawString("click on me drag", Font, b, recF);
}
else
{
//如果不同意用區域改變窗體位置,就把背景設為窗體的
//顏色,免得影響視覺。
b.Color = BackColor;
//把這個區域涂了
e.Graphics.FillRectangle(b, _rec);
}
b.Dispose();//把筆丟了,免得占我地方
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
this.Invalidate(this._rec);//使_rec指定的地方無效了
}
}
}
轉載于:https://www.cnblogs.com/humors/archive/2008/10/16/1312646.html
總結
以上是生活随笔為你收集整理的标题栏外区域拖动窗体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 收集
- 下一篇: 一条语句执行跨越若干个数据库