C#在winForm窗体中添加一个可以自由拖动的控件

这篇具有很好参考价值的文章主要介绍了C#在winForm窗体中添加一个可以自由拖动的控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

目录

文章目录

一、实现步骤

1.创建一个新的Windows窗体项目

2.添加控件如图

3.代码部分

总结



一、实现步骤

1.创建一个新的Windows窗体项目

c#拖拽控件生成代码,开发语言,c#,windows,.net

c#拖拽控件生成代码,开发语言,c#,windows,.net

2.添加控件

textBox1=鼠标在需要拖动的控件中的坐标 X 值

textBox2=鼠标在需要拖动的控件中的坐标 Y 值

textBox3=需要拖动的控件在窗体的坐标 X 值

textBox3=需要拖动的控件在窗体的坐标Y 值

PictureBox1=需要拖动的控件

c#拖拽控件生成代码,开发语言,c#,windows,.net

3.代码部分

1.在pictureBox1中添加事件pictureBox1_MouseDown,双击转到代码编辑

c#拖拽控件生成代码,开发语言,c#,windows,.net

2.声明2个全局变量:

     int 鼠标在拖动的控件中坐标X;
     int 鼠标在拖动的控件中坐标Y;

输入代码

先获取到鼠标按下时,在被选中的控件中的坐标;

并显示到textbox中;

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 可以自由拖动控件的窗体
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int 鼠标在拖动的控件中坐标X;
        int 鼠标在拖动的控件中坐标Y;
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            //鼠标相对于控件左上角的坐标
            鼠标在拖动的控件中坐标X = e.X;
            鼠标在拖动的控件中坐标Y = e.Y;
            textBox1.Text = Convert.ToString(鼠标在拖动的控件中坐标X);
            textBox2.Text = Convert.ToString(鼠标在拖动的控件中坐标Y);
        }
    }
}

 运行看一下效果

 c#拖拽控件生成代码,开发语言,c#,windows,.net

3.在pictureBox1中添加事件pictureBox1_MouseMove,双击转到代码编辑

c#拖拽控件生成代码,开发语言,c#,windows,.net


c#拖拽控件生成代码,开发语言,c#,windows,.net

输入代码:

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 可以自由拖动控件的窗体
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int 鼠标在拖动的控件中坐标X;
        int 鼠标在拖动的控件中坐标Y;
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            //鼠标相对于控件左上角的坐标
            鼠标在拖动的控件中坐标X = e.X;
            鼠标在拖动的控件中坐标Y = e.Y;
            textBox1.Text = Convert.ToString(鼠标在拖动的控件中坐标X);
            textBox2.Text = Convert.ToString(鼠标在拖动的控件中坐标Y);
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {

            if (e.Button == MouseButtons.Left)//判断是否按下了鼠标左键
            {
                Point 鼠标相对于窗体左上角的坐标 = this.PointToClient(Control.MousePosition);//鼠标相对于窗体左上角的坐标
                int 鼠标相对于窗体左上角的坐标X = 鼠标相对于窗体左上角的坐标.X;//鼠标相对于窗体左上角的坐标X
                int 鼠标相对于窗体左上角的坐标Y = 鼠标相对于窗体左上角的坐标.Y;//鼠标相对于窗体左上角的坐标Y
                pictureBox1.Location = new Point(鼠标相对于窗体左上角的坐标X - 鼠标在拖动的控件中坐标X, 鼠标相对于窗体左上角的坐标Y - 鼠标在拖动的控件中坐标Y);//将新的坐标传递给picturebox
                textBox4.Text = Convert.ToString(pictureBox1.Location.X);
                textBox3.Text = Convert.ToString(pictureBox1.Location.Y);
            }
        }
    }
}

 c#拖拽控件生成代码,开发语言,c#,windows,.net

运行效果:

c#拖拽控件生成代码,开发语言,c#,windows,.net

 其它类型的控件实现思路相通;

总结

第一步:在pictureBox1的pictureBox1_MouseDown 鼠标按下 事件中获取到鼠标在pictureBox1控件中的当前位置;

第二步:在pictureBox1的pictureBox1_MouseMove 鼠标移动 事件中,获取鼠标在窗体中的坐标;

第三步:在pictureBox1的pictureBox1_MouseMove鼠标移动 事件中, 用鼠标在窗体中移动后的新坐标,减掉鼠标在pictureBox1控件中的初始坐标,就得到了鼠标移动后的pictureBox1控件新的坐标位置;

第四部:在pictureBox1的pictureBox1_MouseMove鼠标移动 事件中,将新的鼠标坐标赋给pictureBox1控件,就实现了pictureBox1控件随鼠标移动的功能;文章来源地址https://www.toymoban.com/news/detail-804667.html

到了这里,关于C#在winForm窗体中添加一个可以自由拖动的控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • C# 添加现有的窗体的时候,为何窗体的控件不显示了?

    C# 添加现有的窗体的时候,为何窗体的控件不显示了?

    有的项目中一些功能是可以复用的,将原始项目中的窗体文件添加到新项目时,发现有一些问题。添加完之后,打开的窗体发现没有显示任何控件,窗体的大小还变小了? 将Form1.cs Form1.resx Form1.Designer 三个文件直接复制到新项目的目录下,然后直接在新项目上选择添加现有项

    2024年02月10日
    浏览(8)
  • C#桌面程序(winform)如何一步步集成内置WebApi(owin技术),解耦IIS,并将Api接收信息推给桌面窗体控件展示

    C#桌面程序(winform)如何一步步集成内置WebApi(owin技术),解耦IIS,并将Api接收信息推给桌面窗体控件展示

    最近工厂有个需求,服务器上部署了一个服务,此服务要把信息推送给现场多台工控机上的CS上位机程序。由于涉及到多个软件之间的通信,做架构时,首先排除掉中间表形式,从效率和稳定性上也排除掉了Socket,最后采用了WebApi接口形式来做通信。但是有个问题,上位机程

    2023年04月08日
    浏览(10)
  • C#:如何用VS开启人生中第一个Windows窗体应用程序(Winform)?

    C#:如何用VS开启人生中第一个Windows窗体应用程序(Winform)?

    摘要:Windows窗体应用程序(Winform,下文以此指代)既能有效、直观地设计Windows窗体界面,又支持内部逻辑的编写。那么,对于C#初学者来说,如何开启第一个Winform程序呢?    编程语言:C# 编程环境:Visual Studio 2019 目录 步骤 每篇寄语         1、点击桌面Visual Studio 2019图

    2024年02月09日
    浏览(8)
  • WPF-利用装饰器实现控件的自由拖动

    WPF-利用装饰器实现控件的自由拖动

    在项目中经常会遇到类似如下要求的需求,创建允许自由拖动的控件,这样的需求可以使用WPF的装饰器Adorner来实现。   装饰器是一种特殊类型的FrameworkElement,装饰器始终呈现在被装饰元素的顶部,用于向用户提供可视化提示。装饰器可以在不改变原有控件结构的基础上,将

    2024年02月11日
    浏览(11)
  • 使用双缓冲技术解决winform窗体控件卡顿(dataGridView加载数据缓慢)

    使用双缓冲技术解决winform窗体控件卡顿(dataGridView加载数据缓慢)

    在做C/S项目中,做好的窗体出现了页面加载控件缓慢,放大、缩小窗体之后,窗体加载卡顿,以及数据渲染缓慢。 百度介绍:我们看电视时,看到的屏幕称为OSD层,也就是说,只有在OSD层上显示图像我们才能看到。现在,我需要创建一个虚拟的、看不见但是可以在上面画图(

    2024年02月02日
    浏览(7)
  • 【C#】【WinForm】MDI窗体

    【C#】【WinForm】MDI窗体

    MDI窗体的相关学习使用 1、设置MDI父窗体  在属性中找到IsMdiContainer选项,设置为True 2、添加MDI子窗体,在项目中依次选择添加-窗体,然后一直默认即可  添加后的项目目录(Form1为父窗口,Form2、Form3为子窗口)  3、在Form1.cs中,创建对应MDI子窗口的对象并调用显示出来 保存

    2024年02月08日
    浏览(10)
  • 【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

    【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

    .sln文件 :解决方案文件 位置引用 bin文件夹 : 存放项目的编译结果 exe dll debug 调试 release 发布 pdb 位置信息–调试 obj文件夹 object 编译过程中生成的中间临时文件 加快编译速度 Properties 引用 添加引用 --选择需要的程序集 App.config 配置文件 .csproj 项目文件 位置引用 双击打开

    2024年02月08日
    浏览(21)
  • C# winform窗体全屏显示设置

    C# winform窗体全屏显示设置

    窗体全屏显示,并覆盖桌面任务栏。 全屏显示后,如果拖拽标题栏,会使窗体全屏失效(如果禁用了最大话按钮),为了解决这样的问题,需要设置“标题栏移动”属性:

    2024年02月16日
    浏览(13)
  • C#之基于winform窗体绘制简单图形

    C#之基于winform窗体绘制简单图形

    什么是窗体? 可以理解为是一个自定义的控制台应用程序。 假如需要仅仅是用vs制作游戏的话,那么vs中,我们平时所用到的控制台应用程序所呈现的窗口时远远不够用的。因此需要自定义窗体。 因此在新建项目时,我们不能再使用控制台应用程序,而是应该选择窗体: 之

    2023年04月16日
    浏览(8)
  • C# Winform 多进程窗体间传值->SendMessage()

    在 C# 的 Windows Forms 中,使用 Windows API 的 SendMessage 方法可以实现窗口间的消息通传递,当然也可以在不同的进程之间发送消息。接下来,我将为您提供一个基本的示例,演示如何使用 SendMessage 以及如何重写 WndProc 方法来接收并处理消息。 首先,你需要添加对Windows API的引用:

    2024年02月14日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包