gpt4 book ai didi

c# 使用 MouseMove 事件水平移动面板

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:44 25 4
gpt4 key购买 nike

我有一个 winforms 应用程序。在里面,我有一个面板 (panel1),在这个面板里面,还有另一个面板 (panel2),里面有按钮。当我在某个按钮上按下鼠标时,我想在 panel1 内水平移动 panel2。我在 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;
}
}

此代码将 panel2 正确地移动到 panel1 内,但我只想水平移动面板,并且此代码移动到鼠标位置。我试着把

Point(e.X - _mousePos.X, 3)

代替

Point(e.X - _mousePos.X, e.Y - _mousePos.Y)

但是 panel2 消失了。我想知道如何仅水平移动 panel1 内的 panel2。

非常感谢。

最佳答案

    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 事件水平移动面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7797619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com