c#使用MouseMove事件水平移动面板 [英] c# move panel horizontally with MouseMove event
问题描述
我有一个 winforms 应用程序.在里面,我有一个面板 (panel1),在这个面板里面,另一个面板 (panel2) 里面有按钮.当我在某个按钮上按下鼠标时,我想在 panel1 内水平移动 panel2.我在 panel2 内的每个按钮中都做了这个.
I have a winforms app. Inside, I have one panel (panel1), and inside this panel, another panel (panel2) with buttons inside. I want to move panel2 horizontally inside panel1 when I mousedown in some button. I've made this in each button inside panel2.
this.button4.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btMouseDown);
this.button4.MouseMove += new System.Windows.Forms.MouseEventHandler(this.btMouseMove);
this.button4.MouseUp += new System.Windows.Forms.MouseEventHandler(this.btMouseUp);
和
void btMouseMove(object sender, MouseEventArgs e)
{
if (_mouseDown)
panel2.Location = PointToClient(this.panel2.PointToScreen(new Point(e.X - _mousePos.X, e.Y - _mousePos.Y)));
}
void btMouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
_mouseDown = true;
_mousePos = new Point(e.X, e.Y);
}
}
void btMouseUp(object sender, MouseEventArgs e)
{
if (_mouseDown)
{
_mouseDown = false;
}
}
这段代码在 panel1 内正确移动了 panel2,但我只想水平移动面板,这段代码移动到鼠标位置.我试着把
This code moves the panel2 correctly inside the panel1, but I want to move the panel only horizontally, and this code moves to mouse location. I tried to put
Point(e.X - _mousePos.X, 3)
代替
Point(e.X - _mousePos.X, e.Y - _mousePos.Y)
但是 panel2 消失了.我想知道如何仅水平移动 panel1 内的 panel2.
But panel2 disappears. I would like to know how to move the panel2 inside the panel1 only horizontally.
非常感谢.
推荐答案
void btMouseMove(object sender, MouseEventArgs e) {
if (_mouseDown) {
int deltaX = e.X - _mousePos.X;
int deltaY = e.Y - _mousePos.Y;
panel2.Location = new Point(panel2.Left + deltaX, panel2.Top /* + deltaY */);
}
}
这篇关于c#使用MouseMove事件水平移动面板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!