C#无标题栏窗体拖动代码

文章目录

  • 一、概念
  • 二、案例
  • 三、常见问题
  • 四、链接

一、概念

C#(C Sharp)是由微软公司开发的一种面向对象的编程语言。它是从C和C++语言演化而来的,并结合了Java和其他编程语言的特性。C#是微软.NET平台的一部分,允许开发人员创建各种应用程序,包括Windows桌面应用程序、Web应用程序、移动应用程序、游戏等。

以下是一些C#的关键概念:

  1. 面向对象编程(OOP):C#是一种面向对象的编程语言,支持封装、继承和多态等面向对象的概念。它将程序组织为对象,并通过类来定义对象的属性和行为。

  2. 类和对象:在C#中,类是对象的模板,用来定义对象的属性和方法。对象是类的实例,可以通过实例化类来创建对象。

  3. 命名空间(Namespace):命名空间是用来组织和管理相关类和其他类型的容器。通过使用不同的命名空间,可以避免类和其他类型之间的名称冲突。

  4. 变量和数据类型:在C#中,可以声明和使用各种变量来存储数据。C#提供了多种数据类型,包括整数、浮点数、布尔值、字符、字符串等。

  5. 控制结构:C#提供了各种控制结构,如条件语句(if-else、switch)、循环语句(for、while、do-while)、跳转语句(break、continue、return)等,用于控制程序的执行流程。

  6. 方法和函数:方法是一段可重用的代码块,用于执行特定的任务。C#中的方法可以有参数和返回值。函数是一种特殊的方法,它有一个指定的名称,可以通过调用该函数来执行一系列操作。

  7. 异常处理:在C#中,可以使用异常处理机制来捕获和处理运行时错误。使用try-catch语句块可以捕获可能会引发异常的代码,并执行相应的处理逻辑。

  8. 泛型:C#支持泛型编程,它允许在编写类和方法时使用类型参数,从而实现更通用和可重用的代码。

  9. LINQ:LINQ(Language-Integrated Query)是一种查询语言,可以在C#中进行集合和数据查询。它允许开发人员通过类似SQL的语法来查询和操作数据。

  10. 强类型和类型推断:C#是一种强类型的语言,要求所有的变量在声明时都要指定数据类型。C#也支持类型推断,可以根据上下文自动推断变量的类型,简化代码编写。

这些是C#的一些基本概念,了解和掌握这些概念将有助于理解和使用C#编程语言。

二、案例

在C#中,可以通过以下代码实现无标题栏窗体的拖动功能:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace NoTitleBarForm
{
    public partial class MainForm : Form
    {
        private const int WM_NCHITTEST = 0x84;
        private const int HT_CLIENT = 0x1;
        private const int HT_CAPTION = 0x2;
        private const int WM_NCLBUTTONDOWN = 0xA1;
        private const int HTLEFT = 10;
        private const int HTRIGHT = 11;
        private const int HTTOP = 12;
        private const int HTTOPLEFT = 13;
        private const int HTTOPRIGHT = 14;
        private const int HTBOTTOM = 15;
        private const int HTBOTTOMLEFT = 16;
        private const int HTBOTTOMRIGHT = 17;

        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();

        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

        public MainForm()
        {
            InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_NCHITTEST)
            {
                base.WndProc(ref m);

                if (m.Result.ToInt32() == HT_CLIENT)
                {
                    m.Result = new IntPtr(HT_CAPTION);
                }
            }
            else
            {
                base.WndProc(ref m);
            }
        }

        private void MainForm_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }
    }
}

以上代码中,首先通过在 WndProc 方法中重写处理 WM_NCHITTEST 消息,将鼠标在客户区的点击结果设置为标题栏,从而实现无标题栏窗体的移动。

然后,在 MouseDown 事件中判断鼠标左键被按下时,调用 ReleaseCapture 方法和 SendMessage 方法,来进行拖动操作。

最后,在窗体的 MouseDown 事件中添加事件处理程序 MainForm_MouseDown,以响应鼠标按下事件。

三、常见问题

C#常见问题及案例代码

  1. 如何在C#中输出Hello World?
using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
}
  1. 如何在C#中定义变量并赋值?
int number = 10;
string name = "John";
double price = 9.99;
bool isActive = true;
  1. 如何在C#中进行条件判断?
int number = 10;

if (number > 0)
{
    Console.WriteLine("Number is positive.");
}
else if (number < 0)
{
    Console.WriteLine("Number is negative.");
}
else
{
    Console.WriteLine("Number is zero.");
}
  1. 如何在C#中使用循环?
for (int i = 0; i < 10; i++)
{
    Console.WriteLine("Value of i: " + i);
}

while (condition)
{
    // 循环体
}

do
{
    // 循环体
} while (condition);
  1. 如何在C#中定义和使用函数?
int Add(int a, int b)
{
    return a + b;
}

int result = Add(5, 3);
Console.WriteLine("Result: " + result);
  1. 如何在C#中定义和使用类?
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    
    public void SayHello()
    {
        Console.WriteLine("Hello, my name is " + Name);
    }
}

Person person = new Person();
person.Name = "John";
person.Age = 30;
person.SayHello();

在这里插入图片描述

四、链接

Csharp简介
Csharp文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/319795.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超强站群系统v9.0:最新蜘蛛池优化技术,一键安装,内容无缓存刷新,高效安全

安全、高效&#xff0c;化的优化利用php性能&#xff0c;使得运行流畅稳定 独创内容无缓存刷新不变&#xff0c;节省硬盘。防止搜索引擎识别蜘蛛池 蜘蛛池算法&#xff0c;轻松构建站点&#xff08;电影、资讯、图片、论坛等等&#xff09; 可以个性化每个网站的风格、内容、…

YOLOv7涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv7中如何使用 1)iAFF加入Neck替代Concat; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOL…

6.2 声音编辑工具GoldWave5简介(7)

6.2.5其它常用功能 1&#xff0e;高低通 把录制的语音和背景音乐融合在一起时&#xff0c;可能会出现背景音乐音量过大&#xff0c;语音音量过小的现象&#xff0c;这时可以选择“低通”将背景音乐的音量降低一些。 (1)选择【效果】|【波波器】|【低通/高通】命令&#xff0…

wireshark使用教程

目录 windows平台安装Wireshark组件选择Additional TasksPacket CaptureUSB CaptureNpcap Installation Options Ubuntu上安装 Wireshark不使用 sudo 运行 Wireshark 使用GUI抓包使用命令行抓包确定抓取哪个网卡的报文抓取数据包停止抓包设置过滤条件 参考资料 Wireshark 是一款…

SpringBoot整合ES

1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.6.3</version> </dependency> 2.config配置文件 Configu…

杨中科 EFCORE 第三部分 主键

主键 自增主键 1、EF Core支持多种主键生成策略:自动增长;Guid;Hi/Lo算法等。 2、自动增长。 优点:简单; 缺点: 数据库迁移以及分布式系统中&#xff08;多数据库合并&#xff0c;会有重复主键值&#xff09;比较麻烦;并发性能差&#xff08;大并发情况下&#xff0c;为了保证…

【LeetCode: 57. 插入区间+分类讨论+模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

NLP论文阅读记录 - WOS | ROUGE-SEM:使用ROUGE结合语义更好地评估摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 ROUGE-SEM: Better evaluation of summarization using ROUGE combin…

ssh 远程登录协议

一、SSH 服务 1.1 SSH 基础 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;SSH 为建立在应…

STM8入门|第一个工程

开发软件 不支持Keil&#xff0c;使用IAR for STM8&#xff0c;注意 IAR系列有很多种 STM8对应软件是 IAR for STM8 软件下载&#xff1a; 官网下载地址&#xff0c;官网版本下载比较麻烦&#xff0c;可以按教程网盘地址下载。 下载安装教程&#xff1a; https://www.cnblogs…

Compileflow工作流引擎使用讲解

文章目录 1 Compileflow1.1 简介1.2 特点1.3 Compileflow插件下载1.4 main方法调用1.4.1 pom.xml1.4.2 新建bpm文件1.4.3 各个节点绑定方法1.4.4 测试方法 1.5 bpm各个标签说明1.5.1 BPM根节点1.5.2 全局变量1.5.3 开始节点: start1.5.4 结束节点: end1.5.5 自动节点: autoTask…

B-TREE(B-树)

B-TREE B-tree 又叫平衡多路查找树。一棵 m 阶的 B-tree (m 叉树)的特性如下&#xff08;其中 ceil(x)是一个取上限的函数&#xff09;&#xff1a; 树中每个结点至多有 m 个孩子&#xff1b; 除根结点和叶子结点外&#xff0c;其它每个结点至少有有 ceil(m / 2)个孩子&#…

JVM实战(13)——JVM优化概述

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

每日一题——LeetCode1128.等价多米诺骨牌对的数量

先尝试暴力解法&#xff1a; var numEquivDominoPairs function(dominoes) {var count0for(let i0;i<dominoes.length-1;i){for(let ji1;j<dominoes.length;j){if((dominoes[i][0]dominoes[j][0] && dominoes[i][1]dominoes[j][1]) || (dominoes[i][0]dominoes…

Qt/QML编程学习之心得:小键盘keyboard(36)

小键盘对于qml应用是经常用到的,在qml里面,就如一个fileDialog也要自己画一样,小键盘keyboard也是要自己画的,对于相应的每个按键的clicked都要一一实现的。 这里有一个示例: 代码如下: import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Window 2.0 im…

Redis面试篇

redis面试题主要内容 面试官在面试时主要会问以下这些方面的问题 下面是一些问题示例&#xff1a; redis-使用场景 缓存 缓存穿透 介绍 缓存穿透&#xff1a;查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都会去查数…

2.1 常用计算机网络体系结构

2.1 常用计算机网络体系结构 2.1.1 OSI体系结构 1、为了使不同体系结构的计算机网络都能够互联&#xff0c;国际标准化组织于1977年成立了专门机构研究该问题&#xff0c;不久他们就提出了一个试图使各种计算机在世界范围内都能够互连成网的标准框架&#xff0c;也就是著名的…

Redis命令 - Lists命令组常用命令

先创建一个 key 叫做 mylist&#xff0c;mylist存一个list。 list数据类型底层是一个链表。先进后出&#xff0c;后进先出。 命令中的L&#xff08;Left&#xff09;、R&#xff08;Right&#xff09;代表链表的头部L&#xff08;下标0的位置&#xff09;和尾部R&#xff08;…

mysql5.7之从入门到放弃

系列文章目录 第一章 MySQL5.7之从入门到放弃 第二章 MySQL从入门到放弃之数据库体系结构与管理 第三章 MySQL基础应用之DDL、DCL、DML、DQL 文章目录 系列文章目录前言一、Mysql的介绍和安装&#xff1f;1、什么是数据&#xff1f;2、什么是数据库管理系统&#xff08;DBMS&a…

基于深度学习的老照片修复系统

技术栈 深度学习 pytorch tensorflow python 卷积神经 神经网络 照片修复 vue 老照片修复 扫描褪色 残损照片或胶片 调整暗调/高光以改善面效果 修正曝光斑痕 背景&#xff1a; 随着时间的流逝&#xff0c;许多老照片可能会褪色、损坏或曝光不当。这些老照片记录了宝贵的回忆…
最新文章