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#如何让控件一直在窗体中间显示
就是控件会随时变换长度
让他变换长度后整体也是在窗体的中间
而不是向右拉伸
想让控件一直在窗体中间显示,那么可以修改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#怎么才能实现拖动控件时窗体也跟着移动的主要内容,如果未能解决你的问题,请参考以下文章