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

发布时间:2024年01月14日

一、概念

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文档

文章来源:https://blog.csdn.net/xuaner8786/article/details/135584103
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。