c#使用MouseMove事件水平移动面板 [英] c# move panel horizontally with MouseMove event

查看:34
本文介绍了c#使用MouseMove事件水平移动面板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆