c#中如何实现拖动控件?

soft_traveler 2002-12-17 03:04:14
我在vb中实现拖动控件,特别容易,但是在c#中始终没有找到该设置,哪位高人指教一下,谢谢!
...全文
432 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dy_2000_abc 2002-12-17
  • 打赏
  • 举报
回复
你也可以这样做:
namespace abc
{
public abc:Form
{
private Button bn;

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;
[DllImportAttribute ("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute ("user32.dll")]
public static extern bool ReleaseCapture();
...
\\为按钮bn添加鼠标事件
private void bn_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.bn.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
}
}
TheAres 2002-12-17
  • 打赏
  • 举报
回复
可以通过控件的MouseMove,MouseDown和MouseUp事件来实现控件的移动。
如移动Button1按钮, 通过在button1的MouseMove事件句柄button1_MouseMove中,改变button1的位置即可,也就是重新设置this.button1.Location属性的值。
下面提供一段示例程序,演示移动Button按钮,

private Point mousePos; // 记录鼠标位置
private bool beginmove = false; // 记录是否可以移动
……
private void button1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(beginmove)
{
int diffx,diffy;
diffx = mousePos.X - e.X;
diffy = mousePos.Y - e.Y;
this.button1.Location = new Point(button1.Location.X-diffx,button1.Location.Y-diffy);
}
}
private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
beginmove = true;//开始移动
mousePos = new Point(e.X, e.Y);
}
private void button1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
beginmove = false;//停止移动
}

110,539

社区成员

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

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

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