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.mzph.cn/news/621556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EMC VNXe / Unity存储系统如何找回密码

开始之前&#xff0c;先简单说说&#xff0c;EMC的VNXe存储之间的关系。 EMC的VNXe和Unity存储的操作系统OS是一样的&#xff0c;当然不是完全一样&#xff0c;但是架构是一样的&#xff0c;先推出的产品是VNXe&#xff0c;然后在这个基础上演进到了Unity&#xff0c;Unity XT…

港大谷歌提出GO-NeRF:在NeRF中生成协调且高质量的3D对象

尽管在3D生成方面取得了进展&#xff0c;但在作为NeRF表示的现有3D场景中直接创建3D对象仍然是未经探索的。这个过程不仅需要高质量的3D对象生成&#xff0c;还需要将生成的3D内容无缝地合成到现有的NeRF中。为此&#xff0c;作者提出了一种新方法&#xff0c;GO-NeRF&#xff…

电脑定时关机应用

这是一个Python应用。家里卧室装了新电视&#xff0c;HDMI连接笔记本追剧还是很愉快的。可是经常睡着&#xff0c;自然忘了关机。搜了一大圈&#xff0c;都是用命令行或者bat解决。商店里的应用也不好用&#xff0c;有些还收费。于是萌生了自己写一个定时关机应用的想法。利用N…

监控平台zabbix介绍与部署

1. 完整的项目 业务架构&#xff1a;客户端 -> 防火墙 -> 负载均衡&#xff08;四层、七层&#xff09;-> Web缓存/应用 -> 业务逻辑&#xff08;动态应用&#xff09;-> 数据缓存 -> 数据持久 运维架构&#xff1a;运维客户端 -> 堡垒机/跳板机&#x…

TLC Nand Flash 存储单元的读取原理

我们知道Nand Flash使用浮栅晶体管作为存储单元&#xff08;memory cell&#xff09;来存储数据&#xff0c;浮栅晶体管物理结构如图1所示&#xff1a; 图1 浮栅晶体管 对于普通的晶体管&#xff08;去掉浮栅晶体管中的浮栅层&#xff0c;floating gate&#xff09;&#xff0…

基于Docker的Nginx的安装与配置

基于Docker的Nginx的安装与配置 1 为Nginx创建一个容器1.1 学习docker run1.2 通过docker run为Nginx创建并启动一个容器 2 配置Nginx2.1 学习docker的bind mount技术2.2 在Nginx容器中找到想修改的文件所在的目录2.2.1 认识nginx.conf文件2.2.2 访问Nginx服务&#xff0c;默认…

【MATLAB】VMD_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 变分模态分解&#xff08;Variational Mode Decomposition&#xff0c;VMD&#xff09;和LSTM&#xff08;Long Short-Term Memory&#xff09;神经网络结合的算法是一种用于处理时间序列…

超详细的嵌入式cJSON使用注意事项,持续补充中......

文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么&#xff1f; cJSON开源库地址&#xff1a; cJSON 一、堆内存不足 1.1 问…

ssm基于Web的课堂管理系统设计与实现论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

【GitHub项目推荐--开源的坦克大战】【转载】

坦克大战当年红遍大江南北&#xff0c;很多和我一样的九零后应该都有着对这个游戏的记忆。现在显示器分辨率越来越高&#xff0c;使用矢量图来实现像素风格游戏&#xff0c;可以获得非常高的展现质量。 这个项目是作者肥超花了很长时间折腾的复刻版本&#xff0c;所有元素都使…

余弦相似度的计算以及公式

公式&#xff1a; 思想&#xff1a;余弦相似度的思想是通过计算两个向量之间的余弦值来衡量它们的相似程度。如果两个向量之间的夹角越小&#xff0c;它们的余弦值就越接近1&#xff0c;也就意味着它们越相似。而如果它们的夹角越大&#xff0c;余弦值就越接近0&#xff0c;也就…

ES的文档操作

一&#xff0c;DSL语句 1&#xff0c;新增文档&#xff1a; 2&#xff0c;查询文档和删除文档&#xff1a; ,3修改文档 修改有两种方式&#xff1a; 全量修改&#xff1a;直接覆盖原来的文档 增量修改&#xff1a;修改文档中的部分字段 全量修改 全量修改是覆盖原来的文档…

八:分布式锁

1、为什么要使用分布式锁 锁是多线程代码中的概念&#xff0c;只有多任务访问同一个互斥的共享资源时才需要锁。单机应用开发时一般使用synchronized或lock。多线程的运行都是在同一个JVM之下。应用是分布式集群&#xff0c;属于多JVM的工作环境&#xff0c;JVM之间已经无法通过…

Error: L6218E: Undefined symbol 系列错误汇总 (referred from main.o)

传送门 错误1&#xff1a; Undefined symbol(referred from main.o)错误2&#xff1a;Undefined_symbol _use_two_region memory 错误1&#xff1a; Undefined symbol(referred from main.o) Cube_GPIO\Cube_GPIO.axf: Error: L6218E: Undefined symbol LED_GPIO_Init (referr…

操作系统详解(5.1)——信号(Signal)的相关题目

系列文章&#xff1a; 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 文章目录 题目第一问第二问第三问 题目…

FGSM方法生成交通信号牌的对抗图像样本

背景&#xff1a; 生成对抗样本&#xff0c;即扰动图像&#xff0c;让原本是“停车”的信号牌识别为“禁止驶入” 实验准备 模型&#xff1a;找一个训练好的&#xff0c;识别交通信号牌的CNN模型&#xff0c;灰度图像 模型地址&#xff1a;GitHub - Daulettulegenov/TSR_CNN:…

Wargames与bash知识17

Wargames与bash知识17 Bandit25&#xff08;Bandit26&#xff09; 关卡提示 从bandit25登录到bandit26应该相当容易…用户bandit26的shell不是/bin/bash&#xff0c;而是其他东西。找出它是什么&#xff0c;它是如何工作的&#xff0c;以及如何摆脱它。 推荐命令 ssh, cat, …

CSS基础笔记-05layout

CSS基础笔记系列 《CSS基础笔记-01CSS概述》《CSS基础笔记-02动画》《CSS基础笔记-03选择器》《CSS基础笔记-04cascade-specificity-inheritance》 文章目录 CSS基础笔记系列什么是CSS布局布局方法normal flowflexboxgridfloats 总结 什么是CSS布局 CSS布局是指在页面中对元素…

c语言学生管理系统

创建结构体里面包含学生的各种信息。 struct xs {int xh;char xm[20];int gs, yy, wl;double pj;struct xs* next; }; 创建菜单 void menu() {printf("\n************************************\n");printf("* 学生管理系统&#xff08;1.0&#xff0…

C# 图解教程 第5版 —— 第25章 反射和特性

文章目录 25.1 元数据和反射25.2 Type 类25.3 获取 Type 对象25.4 什么是特性25.5 应用特性25.6 预定义的保留特性25.6.1 Obsolete 特性25.6.2 Conditional 特性25.6.3 调用者信息特性25.6.4 DebuggerStepThrough 特性25.6.5 其他预定义特性 25.7 关于应用特性的更多内容25.7.1…