C#怎样实现无边框窗体拖动

chu715322834 2009-11-09 08:01:50
刚学C# 但是急用 希望高手指点 最好能给代码
...全文
4237 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinxia1299 2012-10-24
  • 打赏
  • 举报
回复
这个可以实现,不过也需要在属性栏选定mouse 的3个对应行为,或者在**.Designer.cs中窗体部分加上
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.academyweekshow1_MouseDown);//还需加这3句
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.academyweekshow1_MouseMove);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.academyweekshow1_MouseUp);[Quote=引用 1 楼 的回复:]

C# code
Point mouseOff;//鼠标移动位置变量
bool leftFlag;//标签是否为左键
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left……
[/Quote]
陈义源 2011-08-28
  • 打赏
  • 举报
回复
二楼的8错
fengguoyousheng 2011-04-08
  • 打赏
  • 举报
回复
2 楼的可以实现 正好用上
rqx110 2010-06-13
  • 打赏
  • 举报
回复
protected override void WndProc(ref Message m)
{
if (m.Msg == 163 && this.ClientRectangle.Contains(this.PointToClient(new Point(m.LParam.ToInt32()))) && m.WParam.ToInt32() == 2)
m.WParam = (IntPtr)1;
base.WndProc(ref m);
if (m.Msg == 132 && m.Result.ToInt32() == 1)
m.Result = (IntPtr)2;
}
jingkunliu 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 libinguest 的回复:]
C# code
Point mouseOff;//鼠标移动位置变量
bool leftFlag;//标签是否为左键
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.L……
[/Quote]
可以使用,谢谢,只是我在拖动的时候似乎绘制有些滞后,窗体移动了但原来位置还有原图像的不规则残留痕迹啊
jingkunliu 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chu715322834 的回复:]
引用 1 楼 libinguest 的回复:
C# code Point mouseOff;//鼠标移动位置变量bool leftFlag;//标签是否为左键privatevoid Form1_MouseDown(object sender, MouseEventArgs e)
{if (e.Button== MouseButtons.Left)
{
mous?-

引用楼主 chu7……
[/Quote]
你的主窗体没被其他控件覆盖吧,我是用的picturebox,事件对应添加就行
jingkunliu 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fuliwoaini 的回复:]
谢谢!!!刚好用的上。。
[/Quote]
呵呵,我也是
fuliwoaini 2009-12-14
  • 打赏
  • 举报
回复
谢谢!!!刚好用的上。。
坎离枫 2009-11-09
  • 打赏
  • 举报
回复
添加窗体拖动事件处理或窗体的MouseDown事件处理。这样程序会首先把获得的事件发送给窗体而不是其它控件。在处理函数中添加拖动代码即可。
lzsh0622 2009-11-09
  • 打赏
  • 举报
回复
2楼正解,代码简洁。

(1)把代码复制进FORM的*.CS文件
(2)在属性窗口内,选择指定Form1_MouseDown事件.
晴空 2009-11-09
  • 打赏
  • 举报
回复
看看大侠们的留言^
chu715322834 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 libinguest 的回复:]
C# code Point mouseOff;//鼠标移动位置变量bool leftFlag;//标签是否为左键privatevoid Form1_MouseDown(object sender, MouseEventArgs e)
{if (e.Button== MouseButtons.Left)
{
mous?-
[/Quote]
引用楼主 chu715322834 的回复:
刚学C# 但是急用 希望高手指点 最好能给代码


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Aptech.UI;


namespace myQQ
{
public partial class MainForm : Form
{
Point mouseOff; //记录鼠标指针的坐标
bool leftFlag;



public MainForm()
{
InitializeComponent();
}

private void MainForm_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y); //得到变量的值
leftFlag = true; //点击左键按下时标注为true;
}


}

private void MainForm_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
Location = mouseSet;
}
}

private void MainForm_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;//释放鼠标后标注为false;
}
}
为什么我拖不动窗体啊 刚朋友给我的也是这段代码
chu715322834 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 chu715322834 的回复:]
刚学C# 但是急用  希望高手指点 最好能给代码
[/Quote]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Aptech.UI;



namespace myQQ
{
public partial class MainForm : Form
{
Point mouseOff; //记录鼠标指针的坐标
bool leftFlag;



public MainForm()
{
InitializeComponent();
}

private void MainForm_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y); //得到变量的值
leftFlag = true; //点击左键按下时标注为true;
}



}

private void MainForm_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
Location = mouseSet;
}
}

private void MainForm_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;//释放鼠标后标注为false;
}
}
为什么我拖不动窗体啊 刚朋友给我的也是这段代码
ProjectDD 2009-11-09
  • 打赏
  • 举报
回复
UP
风之影子 2009-11-09
  • 打赏
  • 举报
回复
调用API
using System.Runtime.InteropServices;

[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 Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
风之影子 2009-11-09
  • 打赏
  • 举报
回复
       Point mouseOff;//鼠标移动位置变量
bool leftFlag;//标签是否为左键
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y); //得到变量的值
leftFlag = true; //点击左键按下时标注为true;
}
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
Location = mouseSet;
}
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;//释放鼠标后标注为false;
}
}

110,538

社区成员

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

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

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