C#: 要把容器内的某个控件 在运行后随便拖动,该怎么做啊?

 我来答
匿名用户
2013-06-23
展开全部
大多WinForm控件都有MouseMove,MouseDown,MouseUp.
你可以就利用控件的这三个事件来实现鼠标拖动某个控件.

如:
1.新建一窗体.
2.在窗体画一个button控件.
3.在button控件的MouseMove,MouseDown,MouseUp三事件方法里分别写下这样的代码:

bool _isPressed=false;
Point _position=new Point(0,0);
private void button_MouseMove(object sender,EventArgs e)
{
if(_isPressed)
{
_position.X=e.X;
_position.Y=e.Y;
this.button.Location=_position;
}
}

private void button_MouseDown(object sender,EventArgs e)
{
_isPressed=true;
}

private void button_MouseUp(object sender,EventArgs e)
{
_isPressed=false;
}

在这里写代码可能会写错部分代码.

不过这是一种比较普通用法的思路.

希望对你有用.
魔法软糖™
2022-08-27 · TA获得超过837个赞
知道小有建树答主
回答量:822
采纳率:94%
帮助的人:147万
展开全部

下面演示了如何动态创建和拖动控件位置(运行时)。


调用下面代码的 〈给控件添加移动功能〉方法,就能让控件在运行时用右键拖动。


       

 private void 给控件添加移动功能(Control 控件) {

            控件.MouseDown += 按钮_MouseDown;

            控件.MouseUp += 按钮_MouseUp;

            控件.MouseMove += 按钮_MouseMove;

        }

            

        private Point 鼠标位置1, 鼠标位置2, 窗体位置1, 窗体位置2;

        private bool 按下鼠标 = false;

        public static bool 允许拖动 = true;

        private void 按钮_MouseDown(object sender, MouseEventArgs e) {

            if (允许拖动) {

                if (e.Button == MouseButtons.Right) {

                    按下鼠标 = true;

                    鼠标位置1 = Control.MousePosition;

                    Control c = sender as Control;

                    窗体位置1 = c.Location;

                }

            }


        }

        private void 按钮_MouseMove(object sender, MouseEventArgs e) {

            if (允许拖动 && 按下鼠标) {

                鼠标位置2 = Control.MousePosition;

                窗体位置2.X = 鼠标位置2.X - 鼠标位置1.X + 窗体位置1.X;

                窗体位置2.Y = 鼠标位置2.Y - 鼠标位置1.Y + 窗体位置1.Y;


                Control c = sender as Control;

                c.Location = 窗体位置2;


                窗体位置1 = 窗体位置2;

                鼠标位置1 = 鼠标位置2;


                坐标显示.Visible = true;

                var p = this.PointToScreen(this.Location);

                坐标显示.Location = new Point(c.Location.X, c.Location.Y - 坐标显示.Height);

                坐标显示.BackColor = Color.LightSeaGreen;

                坐标显示.Text = string.Format("{0:0},{1:0}", c.Location.X, c.Location.Y);

            }

        }

        private void 按钮_MouseUp(object sender, MouseEventArgs e) {

            if (允许拖动) {

                if (e.Button == MouseButtons.Right) { 

                    按下鼠标 = false;

                }

                坐标显示.Visible = false;

            }

        }

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-23
展开全部
可以动态改变位置的嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式