首页 > 编程语言 >c#之Form类简介

c#之Form类简介

时间:2023-09-08 20:44:39浏览次数:35  
标签:Form c# 简介 System 窗体 Graphics using 绘制

Form是窗口体类

  1. 命名空间System.Windows.Forms

  2. 继承关系Form 类是 Control 类的子类,因此它继承了 Control 类的所有特性,如位置、大小、颜色等。同时,Form 也继承了 ContainerControl 类,允许容纳其他控件。

  3. 创建窗体:使用 Form 类的构造函数可以创建窗体的实例,例如:

    Form myForm = new Form();
  4. 窗体属性Form 类提供了许多属性来定制窗体的外观和行为,包括标题、大小、位置、背景颜色、图标、最小化、最大化按钮等。

  5. 事件处理:可以通过事件处理程序来响应窗体上的各种事件,例如窗体加载、关闭、大小改变等事件。

  6. 添加控件Form 可以容纳其他控件,如按钮、文本框、标签等。通过 Controls 属性可以添加和管理这些控件。

  7. 显示和隐藏:使用 Show() 方法可以显示窗体,使用 Hide() 方法可以隐藏窗体。

  8. 关闭窗体:使用 Close() 方法可以关闭窗体。还可以通过设置窗体的 CloseButton 属性来控制关闭按钮的可见性。

  9. 模态对话框Form 类可以用于创建模态对话框,通过 ShowDialog() 方法显示模态对话框,该对话框将阻止用户与应用程序的其他部分进行交互,直到对话框关闭。

  10. 菜单和工具栏Form 可以与菜单栏和工具栏一起使用,以创建具有菜单和工具栏的窗体应用程序。

  11. 多文档界面Form 可以用于创建多文档界面 (MDI) 应用程序,其中一个窗体可以容纳多个子窗体。

  12. 布局管理:可以使用布局管理器来管理窗体上的控件的布局,以便它们可以根据窗体的大小自动调整位置。

一般我们通过继承Form类的形式来自定义我们自己想要的窗体

上面FormRun类是我们的启动程序,MyForm和MyFormCompents描述窗口体的,前者用于描述窗口体里面的各种事件,后者用来描述窗口体里面的空间以及窗口体的属性

这里我要介绍一个关键字partial,该关键字的作用是可以把类拆成多个来描述,这些类的类名都一样

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

//控件类
namespace Project1
{
    public partial class MyForm:Form
    {
        //Form关于窗口体的常用属性
        private void InitializeComponent()
        {
            // 设置窗体标题
            this.Text = "第一个窗体";

            // 设置窗体大小,这里 W 400 H 300
            this.ClientSize = new System.Drawing.Size(400, 300);

            // 设置窗体的启动位置为屏幕中央
            this.StartPosition = FormStartPosition.CenterScreen;

            // 设置窗体背景颜色
            this.BackColor = System.Drawing.Color.LightGray;

            // 设置窗体的图标,注意这里启动完的文件夹路径为bin/debug/下
            this.Icon = new System.Drawing.Icon("../../data/img/0.ico");

            // 设置窗体是否可调整大小
            this.FormBorderStyle = FormBorderStyle.Sizable;

            // 设置窗体关闭按钮的行为
            this.ControlBox = true;

            // 设置窗体是否在任务栏里面显示
            this.ShowInTaskbar = true;

            // 设置窗体最大化和最小化按钮是否可见
            this.MaximizeBox = true;
            this.MinimizeBox = true;

            // 设置窗体是否置顶
            this.TopMost = true;

            // 设置窗体的样式,包括最大化,正常和最小化三种样式
            this.WindowState = FormWindowState.Normal;

            // 设置窗体的背景图片
            this.BackgroundImage = new System.Drawing.Bitmap("../../data/img/back.jpg");

            // 设置窗体的文本字体和颜色
            this.Font = new System.Drawing.Font("Arial", 12, System.Drawing.FontStyle.Regular);
            this.ForeColor = System.Drawing.Color.Black;

        }
    }
}

//事件类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Project1
{
   public partial class MyForm
    {
        public MyForm()
        {
            InitializeComponent();
        }
    }
}

//启动类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Project1
{
    internal class FormRun
    {
        public static void Main(string[] args)
        {
            Application.Run(new MyForm());
        }
    }
}

窗口体的绘制

首先需要创建一个画布,对于不同的视图使用不同的会话工具如画笔Pen,刷子SolidBrush等

  1. 绘制基本图形

    • 绘制线段:使用 Graphics.DrawLine 方法绘制直线。
    • 绘制矩形:使用 Graphics.DrawRectangle 方法绘制矩形。
    • 绘制椭圆:使用 Graphics.DrawEllipse 方法绘制椭圆。
    • 绘制圆角矩形:使用 Graphics.DrawRoundRectangle 方法绘制带有圆角的矩形。
  2. 绘制文本

    • 绘制字符串:使用 Graphics.DrawString 方法绘制文本。
    • 自定义字体和颜色:可以指定字体、颜色和对齐方式。
  3. 绘制图像

    • 绘制位图:使用 Graphics.DrawImage 方法绘制位图。
    • 绘制图标:使用 Graphics.DrawIcon 方法绘制图标。
  4. 绘制曲线

    • 绘制贝塞尔曲线:使用 Graphics.DrawBezier 方法绘制平滑的曲线。
    • 绘制曲线路径:使用 Graphics.DrawPath 方法绘制复杂的曲线路径。
  5. 填充

    • 填充矩形:使用 Graphics.FillRectangle 方法填充矩形。
    • 填充椭圆:使用 Graphics.FillEllipse 方法填充椭圆。
    • 填充多边形:使用 Graphics.FillPolygon 方法填充多边形区域。
  6. 渐变和纹理

    • 线性渐变:可以创建线性渐变画刷并应用于绘图。
    • 径向渐变:可以创建径向渐变画刷并应用于绘图。
    • 纹理填充:可以使用纹理填充图形。
  7. 图形变换

    • 平移:通过修改坐标系进行平移。
    • 旋转:通过旋转坐标系进行旋转。
    • 缩放:通过缩放坐标系进行缩放。
  8. 透明度和融合

    • 透明度:可以设置图形对象的透明度。
    • 混合模式:可以应用混合模式来处理图形的叠加效果。
  9. 高级绘图

    • 绘制文本路径:可以在曲线上绘制文本。
    • 绘制图形路径:可以创建自定义的图形路径进行绘制。
    • 阴影和发光效果:可以应用阴影和发光效果来增强图形。
  10. 图像处理

    • 裁剪图像:可以裁剪位图以获取所需区域。
    • 旋转图像:可以旋转位图。
    • 缩放图像:可以缩放位图。

这里我们需要增加一个绘画事件并且绑定

this.Paint +=new PaintEventHandler(MyForm_Paint);

        private void MyForm_Paint(Object sender,PaintEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            Pen p = new Pen(Color.White);
            p.Width = 3;
            g.DrawLine(p, 100, 170,180, 200);
            g.DrawString("这是第一个窗体",new Font("隶书",30),new SolidBrush(Color.Red),80,200);
            g.DrawArc(p, 10, 10, 90, 90, 0, 360);

        }

Form大概介绍到这里,大部分控件可以参考官方的文档

标签:Form,c#,简介,System,窗体,Graphics,using,绘制
From: https://www.cnblogs.com/liyiyang/p/17688515.html

相关文章

  • mysql create procedure with in parameters ,call procedure
    //createprocedurestatementdelimiter$$usedb$$dropprocedureifexistsinsertIntoT1Table;createprocedureinsertIntoT1Table(innumint)begindeclareiintdefault1;while(i<num)doinsertintot1(name,abstract,author,content,summary)values(uui......
  • Chrome Extension Develop: i18n
    Internationalizationandlocalization1Beginchrome.i18n-ChromeDevelopers如果是使用开发框架,需要检查是否将_locales文件夹拷贝到了输出目录,有可能需要自己配置。newCopyWebpackPlugin({patterns:[{from:"src/_locales",to:path.join(__dirname,"......
  • JAVA日志技术 & Logback
    前言为什么需要记录日志?我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统监控和异常分析起着至关重要的作用一、日志概括1.了解日志框架JAVA在早期的日......
  • 走进CSS—I
    点击链接走进前端学习:https://blog.csdn.net/qq_53810245/article/details/116831968@目录一、走进CSS1、CSS的简单介绍1、什么是CSS1.1、什么是CSS1.2、发展史2、CSS快速入门3、CSS的优势:4、CSS的3种导入方式行内样式(内联样式)内部样式(内嵌样式表)外部样式(外链式)2、CSS选择器(重点+......
  • 走进JavaScript基础语法
    点击链接走进前端学习:https://blog.csdn.net/qq_53810245/article/details/116831968@目录JavaScript1、概述2、基本语法入门2.1定义变量2.2浏览器控制台使用在这里插入图片描述2.3数据类型1.变量命名:以$或_开头标识2.number:3.字符串:'abc',''abc''4.布尔值:true,false5.逻......
  • 【题解】CF1854E Game Bundles
    你考虑我们需要构造出一组解,显然地这样的解有很多很多种(\({60^{60}}\)显然是及其地大)。那关键是我们如何进行构造。我们很容易知道每个集合里面\(>30\)的数只有一个。所以我们可以在\([1,30]\)中随机\(a_i\),直到满足的组数恰好小于等于\(a_i\),添加的时候维护数组\(f_i......
  • 2023-09-08 小程序之启用组件按需注入 ==》 添加一行代码:"lazyCodeLoading": "require
    在manifest.json文件里面的mp-weix对象添加代码:"lazyCodeLoading":"requiredComponents"可实现组件按需注入,引用官方说法就是:启用按需注入后,小程序仅注入当前访问页面所需的自定义组件和页面代码。未访问的页面、当前页面未声明的自定义组件不会被加载和初始化,对应代码文件将不被......
  • 为什么el-table-column的type属性不能动态变化?
    在ElementUI中,`el-table-column`组件的`type`属性无法动态变化,而`el-button`组件的`disabled`属性可以动态变化,这是因为这两个属性在实现上有所不同,涉及到了Vue组件的属性绑定方式和属性的响应性。`el-table-column`组件的`type`属性是静态属性,是在组件初始化阶段就确定的,无法通......
  • css加载图标转圈代码
    转圈代码<iclass="el-icon-loading"></i>.el-icon-loading{animation:rotating2slinearinfinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframesrotating{0%{transfor......
  • C# 操作注册表Helper类
    usingMicrosoft.Win32;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceControls.Helper{publicclassRegistryHelper{///<summary>///默认注册表基项///</summar......