C# 在窗体上可拖动控件
最近做了一个标签打印配置功能,需要根据客户需求自定义标签格式、显示内容,这时就用到了后台生成控件,并且其控件可在窗口中进行拖动,这里仅为记录一下实现过程,方便以后使用。
结果图:
源码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Forms { public partial class Form1 : Form { public Form1() { InitializeComponent(); } PictureBox picture; Point downPoint; private void button1_Click(object sender, EventArgs e) { picture = new PictureBox(); picture.Name = "picture" + DateTime.Now.ToString("yyyyMMddHHmmss"); //图片name picture.Image = Image.FromFile("F:\\ChromeDownload\\43e66f0c6da21dc3d563bb48e32d4c0e.jpg"); //图片路径 picture.Width = 240; //图片宽度 picture.Height = 135; //图片高度 picture.SizeMode = PictureBoxSizeMode.StretchImage; //指定图片显示格式 picture.MouseDown += new MouseEventHandler(pictureBox_MouseDown); //鼠标按下事件 picture.MouseMove += new MouseEventHandler(pictureBox_MouseMove); //鼠标移动事件 picture.Location = new Point(10,10); //location:x,y picture.Parent = panelControls; } private void Form1_Load(object sender, EventArgs e) { } /// <summary> /// 鼠标按下事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pictureBox_MouseDown(object sender, MouseEventArgs e) { picture = (PictureBox)sender; //指定当前元素 downPoint = e.Location; } /// <summary> /// 鼠标移动事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pictureBox_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { picture.Location = new Point(picture.Location.X + e.X - downPoint.X, picture.Location.Y + e.Y - downPoint.Y); } } } }