C#怎么才能实现拖动控件时窗体也跟着移动 5

 我来答
魔法软糖™
2022-08-27 · TA获得超过838个赞
知道小有建树答主
回答量:822
采纳率:94%
帮助的人:149万
展开全部

谁说不能拖动控件来移动窗体的。

这不就做出来了嘛:


using System;

using System.Drawing;

using System.Windows.Forms;


namespace 可以拖动的工具箱 {

    public partial class 工具箱窗体 : Form {

        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.Left) {

                    按下鼠标 = true;

                    // Save window position and mouse position

                    鼠标位置1 = Control.MousePosition;

                    窗体位置1 = Location;

                }

            }


        }

        private void 工具箱窗体_MouseMove(object sender, MouseEventArgs e) {

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

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

                鼠标位置2 = Control.MousePosition;

                //Set window position

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

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

                //Save window position

                Location = 窗体位置2;

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

                //Save mouse position

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

                坐标显示.Visible = true;

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

                var rect = this.RectangleToScreen(Form1.停靠面板.Bounds);

                if (rect.Contains(p)) {

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

                    坐标显示.BackColor = Color.DodgerBlue;

                    坐标显示.Text = string.Format("停靠");

                } else {

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

                    坐标显示.BackColor = Color.LightSeaGreen;

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

                }

                

            }

        }

        private void 工具箱窗体_MouseUp(object sender, MouseEventArgs e) {

            if (允许拖动) {

                if (e.Button == MouseButtons.Left)

                    //Return back signal

                    按下鼠标 = false;


                //判断是否位于停靠区域

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

                var rect = this.RectangleToScreen(Form1.停靠面板.Bounds);

                if (rect.Contains(p)) {

                    允许拖动 = false;

                    this.Hide();

                    Location = rect.Location;

                    Form1.停靠面板.Visible = true;

                }

                坐标显示.Visible = false;

            }

        }


        public 工具箱窗体() {

            InitializeComponent();

        }


        private void 工具箱窗体_Load(object sender, EventArgs e) {

            FormBorderStyle = FormBorderStyle.Fixed3D;

            this.ControlBox = false;

            this.ShowIcon = false;

            this.ShowInTaskbar = false;

            坐标显示.Visible = false;

        }

    }

}

百度网友7693d9fd
2011-11-24 · TA获得超过292个赞
知道小有建树答主
回答量:801
采纳率:0%
帮助的人:235万
展开全部
这个是不能的,只能改变窗体的大小,改变窗体大小的办法是先选中窗体,然后再在右下边的边框上拖动。只有调试之后的窗体才可以拖动的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d242235
2011-11-23 · TA获得超过2385个赞
知道大有可为答主
回答量:1403
采纳率:84%
帮助的人:824万
展开全部
控件默认状态下,只有在vs的设计器中才能拖动的。至于窗体也跟着移动,那做不到。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华佗之父
2011-11-23 · TA获得超过1241个赞
知道小有建树答主
回答量:1623
采纳率:0%
帮助的人:1119万
展开全部
在控件的locationChange事件里面写代码,改变窗体的location属性。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式