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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎么才能实现拖动控件时窗体也跟着移动相关的知识,希望对你有一定的参考价值。

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

这不就做出来了嘛:


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;

       

   

参考技术A 这个是不能的,只能改变窗体的大小,改变窗体大小的办法是先选中窗体,然后再在右下边的边框上拖动。只有调试之后的窗体才可以拖动的? 参考技术B 控件默认状态下,只有在vs的设计器中才能拖动的。至于窗体也跟着移动,那做不到。 参考技术C 在控件的locationChange事件里面写代码,改变窗体的location属性。

C#如何让控件一直在窗体中间显示

就是控件会随时变换长度
让他变换长度后整体也是在窗体的中间
而不是向右拉伸

C#控件都有一个Anchor属性,而且Anchor属性的默认值都是Top,Left,因此当窗体大小变化时,你会发现控件的位置相对于整个窗体而言发生了变化。
想让控件一直在窗体中间显示,那么可以修改Anchor属性,将其值修改为None,再次预览就会发现控件会一直在窗体中间显示。
参考技术A 必须吧控件装在一个容器里面才能实现这个效果,你这种情况,只能在下面放一个3*3的tablecontrol,把你的控件放在中间那个格子里,定义好第二行第二列的高宽,一行一列和三行三列的宽度、高度定为50%,然后tabcontrol dock到父窗体中,你的控件也就一直在中间了。
没仔细看楼主的问题,我想你应该是想讲label内容限定在某个范围内显示,不让他无限制的自动增长,这种情况还是要这个思路,将label放在容器里以限制宽度,然后设置那个自动换行属性为true,文本对齐为居中对齐,这样就会居中自动增长,且到达容器宽度后自动换行。
参考技术B mark 一下~~ 参考技术C 学习了! 参考技术D 选择该控件,在属性面板中修改其anchor属性为上下左右就可以了。追问

不行啊 我现在的状况是一个label控件text初始值是空 然后我通过操作程序 给他在代码里赋值一个很长的字符串text=SDFDFGDHSHFGHSHDSGHFH; 然后运行结果就是从程序中间开始一直往后延伸

追答

根据楼下那位仁兄的方法我试了一下,总结方法如下:首先拖拽TableLayoutPanel到窗口,设置其Dock和Anchor属性。然后拖拽textbox到TableLayoutPanel中,设置其Dock和Anchor属性,如果设置正确的话应该可以出现你想要的效果。试试吧

本回答被提问者采纳

以上是关于C#怎么才能实现拖动控件时窗体也跟着移动的主要内容,如果未能解决你的问题,请参考以下文章

C#中去掉winform边框如何拖动

ToolStrip控件左右拖拽移动效果实现

在delphi中,在运行时如何让拖动的控件显示在最上方?

C#如何让控件一直在窗体中间显示

C#移动无边框的窗体怎么写。

vb.net: 一个用户控件,把它放在窗体中,当拖动它时,窗体也随之移动,这样这个窗体就不需要标题栏来拖动了