当form的formBorderStyle设置为None时,如何实现窗体拖动

blueteeth_yl 2010-01-27 09:13:34
就是自己重新弄一个标题栏的东西,然后实现拖动
...全文
324 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzy1842 2010-01-27
  • 打赏
  • 举报
回复
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
在窗体的mousedown事件中实现拖动。
private void frmWinCalendar_MouseDown(object sender, MouseEventArgs e)
{
//拖动窗体
this.Cursor = System.Windows.Forms.Cursors.Hand; //改变鼠标样式
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
this.Cursor = System.Windows.Forms.Cursors.Default;
}
ILOVE_ASPNET 2010-01-27
  • 打赏
  • 举报
回复
up
guanmingle 2010-01-27
  • 打赏
  • 举报
回复
private bool flagMove = false;   
public Form1()
{
InitializeComponent();
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);
}

//左键按下时,设置可移动
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
this.flagMove = true;
}
//左键松开时,设置不可移动
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
this.flagMove = false;
}
//移动
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (this.flagMove)
{
this.Location = new Point(e.X,e.Y);
}
}
ck11926375 2010-01-27
  • 打赏
  • 举报
回复

private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下

private void picCLose_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void fmLogin_MouseDown(object sender, 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 fmLogin_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X+5, mouseOffset.Y+30);
Location = mousePos;
}
}

private void fmLogin_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
LoveLife_Go 2010-01-27
  • 打赏
  • 举报
回复
没这么做过,看看高手怎么处理的

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧