C#的这个功能是怎么实现的???(也许很多人都想知道)

编程爱好者L 2010-09-25 11:10:37
我们在电脑上鼠标点击一拖动就可以选择多个文件夹,从而进行改变它们的位置.最近做项目就碰到了这个问题,我的窗体上放了几个按钮,运行时我如何鼠标点击拖动就能选择他们,从而对这几个按钮进行拖动.这个问题我已经找了很久了,都没有眉目,我以前是做B/S的,现在在做C/S,对于winform还是知道得少,请大家说说...
...全文
534 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucky_yyx 2010-09-26
  • 打赏
  • 举报
回复
2个连在一起 就可以了 里面有Most_MouseUp MouseDown MouseMove的使用方法
lucky_yyx 2010-09-26
  • 打赏
  • 举报
回复

private void frmTopMost_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{

blnMouseDown = true;



// Save window position and mouse position

ptMouseCurrrnetPos = Control.MousePosition;

ptFormPos = Location;

}


}

private void frmTopMost_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)

//Return back signal

blnMouseDown = false;


}

private void frmTopMost_DoubleClick(object sender, EventArgs e)
{
SwitchToMain();

}
private System.Windows.Forms.ContextMenu mnuPopup;

private System.Windows.Forms.MenuItem mnuMainWindow;

private System.Windows.Forms.MenuItem mnuExit;
private void mnuMainWindow_Click(object sender, System.EventArgs e)
{

SwitchToMain();

}



private void mnuExit_Click(object sender, System.EventArgs e)
{

Application.Exit();

}
lucky_yyx 2010-09-26
  • 打赏
  • 举报
回复
private Point ptMouseCurrrnetPos, ptMouseNewPos,

ptFormPos, ptFormNewPos;

private bool blnMouseDown = false;

private ExcelTreatment.ExcelSelect pParent;

private void frmTopMost_Load(object sender, EventArgs e)
{
this.Show();

this.Top = 100;

this.Left = Screen.PrimaryScreen.Bounds.Width - 100;

this.Width = 60;

this.Height = 60;


}

private void frmTopMost_MouseMove(object sender, MouseEventArgs e)
{
if (blnMouseDown)
{

//Get the current position of the mouse in the screen

ptMouseNewPos = Control.MousePosition;



//Set window position

ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrrnetPos.X + ptFormPos.X;

ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrrnetPos.Y + ptFormPos.Y;



//Save window position

Location = ptFormNewPos;

ptFormPos = ptFormNewPos;



//Save mouse position

ptMouseCurrrnetPos = ptMouseNewPos;

}


}
编程爱好者L 2010-09-26
  • 打赏
  • 举报
回复
难道真的要遍历来判断一个按钮是否在这个选中的矩形区域中...
xishi444 2010-09-26
  • 打赏
  • 举报
回复
把鼠标点击下的位置和鼠标松开的位置结合
ptlive1001 2010-09-26
  • 打赏
  • 举报
回复
....
编程爱好者L 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 51crack 的回复:]

VB.NET code

Dim vObj As Control
For Each vObj In Me.Controls
'自己加条件,只处理按钮
AddHandler vObj.MouseDown, AddressOf Control_Down
AddHandler vObj.MouseMove, AddressOf Control_Move
Next

Private ……
[/Quote]
VB的代码,C#里面好像没有CType吧?
yanele 2010-09-26
  • 打赏
  • 举报
回复
这个功能的确不错,期待正解!
编程爱好者L 2010-09-26
  • 打赏
  • 举报
回复
这个是什么样的效果..谢谢大家了,我想我可以实现了.
编程爱好者L 2010-09-26
  • 打赏
  • 举报
回复
private Point ptMouseCurrrnetPos, ptMouseNewPos,
ptFormPos, ptFormNewPos;
private bool blnMouseDown = false;
private ExcelTreatment.ExcelSelect pParent;
private void frmTopMost_Load(object sender, EventArgs e)
{
this.Show();
this.Top = 100;
this.Left = Screen.PrimaryScreen.Bounds.Width - 100;
this.Width = 60;
this.Height = 60;
}
private void frmTopMost_MouseMove(object sender, MouseEventArgs e)
{
if (blnMouseDown)
{
//Get the current position of the mouse in the screen
ptMouseNewPos = Control.MousePosition;
//Set window position
ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrrnetPos.X + ptFormPos.X;
ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrrnetPos.Y + ptFormPos.Y;
//Save window position
Location = ptFormNewPos;
ptFormPos = ptFormNewPos;
//Save mouse position
ptMouseCurrrnetPos = ptMouseNewPos;
}
}
private void frmTopMost_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
blnMouseDown = true;
// Save window position and mouse position
ptMouseCurrrnetPos = Control.MousePosition;
ptFormPos = Location;
}
}
private void frmTopMost_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
//Return back signal
blnMouseDown = false;
}
private void frmTopMost_DoubleClick(object sender, EventArgs e)
{
SwitchToMain();
}
private System.Windows.Forms.ContextMenu mnuPopup;
private System.Windows.Forms.MenuItem mnuMainWindow;
private System.Windows.Forms.MenuItem mnuExit;
private void mnuMainWindow_Click(object sender, System.EventArgs e)
{
SwitchToMain();
}
private void mnuExit_Click(object sender, System.EventArgs e)
{
Application.Exit();
}
vip__888 2010-09-25
  • 打赏
  • 举报
回复
....
xiangma04 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xzjxylophone 的回复:]
DragMove 事件,记录当前鼠标的位置, 然后 把button 的位置重新布局一下, 在winform 上 重绘下 该button
[/Quote]

正解
编程爱好者L 2010-09-25
  • 打赏
  • 举报
回复
哥们不要走啊,回来说清楚点啊,很需要各位的帮助.........
编程爱好者L 2010-09-25
  • 打赏
  • 举报
回复
继续期待高手的到来.....
kj289907795 2010-09-25
  • 打赏
  • 举报
回复
顶下!!
ZengHD 2010-09-25
  • 打赏
  • 举报
回复
MouseMove
编程爱好者L 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 josxhn 的回复:]

drag打头的方法,看看msdn吧
[/Quote]
drag打头是什么意思啊 ,能详细点吗
编程爱好者L 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vampire_ycq 的回复:]

把鼠标点击下的位置和鼠标松开的位置结合,看看那些按钮是不是在这个范围内,如果在 看看你鼠标 X , Y 移动了多少距离,再把那些按钮的距离 改变。
[/Quote]
这种方法是不是太麻烦了,而且代码量很多啊
gongsun 2010-09-25
  • 打赏
  • 举报
回复
...
josxhn 2010-09-25
  • 打赏
  • 举报
回复
drag打头的方法,看看msdn吧
加载更多回复(21)

111,129

社区成员

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

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

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