【WinForm.NET开发】自定义控件

本文内容

  1. 基控件类
  2. 创建自己的控件
  3. 用户控件
  4. 扩展控件

可使用 Windows 窗体开发和实现新的控件。 可以创建新的用户控件,通过继承来修改现有控件,或编写可自行绘制的自定义控件。 本文重点介绍各种可继承控件之间的差异,并提供有关如何为项目选择某种特定控件的信息。

1、基控件类

Control 类是 Windows 窗体控件的基类。 它提供了在 Windows 窗体应用程序中进行可视化显示所需的基础结构,并提供了以下功能:

  • 公开窗口句柄。
  • 管理消息路由。
  • 提供鼠标和键盘事件,以及许多其他用户界面事件。
  • 提供高级布局功能。
  • 包含特定于可视化显示的多个属性,如 ForeColor、BackColor、Height 和 Width。

由于基类提供了大量基础结构,因此开发你自己的 Windows 窗体控件相对比较简单。

2、创建自己的控件

可以创建三种类型的自定义控件:用户控件、扩展控件和自定义控件。 下表可帮助你确定应创建的控件类型:

展开表

如果出现如下情况创建以下内容
  • 你想要将多个 Windows 窗体控件的功能组合到单个可重用单元。
通过从 System.Windows.Forms.UserControl 继承来设计用户控件。
  • 大部分所需功能与现有的 Windows 窗体控件相同。
  • 你不需要自定义图形用户界面,或者想为现有控件设计一个新的图形用户界面。
通过从某一特定 Windows 窗体控件继承来扩展控件。
  • 你想要提供控件的自定义图形表示形式。
  • 你需要实现不能通过标准控件实现的自定义功能。
通过从 System.Windows.Forms.Control 继承来创建自定义控件。

3、用户控件

用户控件是作为单个控件提供给使用者的 Windows 窗体控件的集合。 此类控件称为复合控件。 其包含的控件称为构成控件。

用户控件包含与每个包含的 Windows 窗体控件相关联的所有固有功能,允许选择性地公开和绑定它们的属性。 用户控件还提供了大量的默认键盘处理功能,用户不需要进行任何额外的开发。

例如,可以生成用户控件,以显示来自数据库的客户地址数据。 此控件将包括用于显示数据库字段的 DataGridView 控件、用于处理到数据源的绑定的 BindingSource,以及用于在记录之间移动的 BindingNavigator 控件。 可以选择性地公开数据绑定属性,还可以将整个控件打包并在不同应用程序之间重复使用。

4、扩展控件

你可以从任何现有的 Windows 窗体控件派生继承的控件。 使用此方法,你可以保留 Windows 窗体控件的所有固有功能,然后通过添加自定义属性、方法或其他功能来扩展该功能。 可以使用此选项重写基控件的绘制逻辑,然后通过更改该控件的外观来扩展其用户界面。

例如,可以创建一个由 Button 控件派生的控件,并用它来跟踪用户的单击次数。

在某些控件中,也可以通过重写基类的 OnPaint 方法为控件的图形用户界面添加自定义外观。 对于跟踪单击次数的扩展按钮,可以重写 OnPaint 方法以调用 OnPaint 的基实现,然后在 Button 控件的工作区的一角绘制单击计数。

自定义控件

创建控件的另一种方法是通过从 Control 继承,从头开始充分创建一个控件。 Control 类提供控件所需的所有基本功能(包括鼠标和键盘处理事件),但不提供特定于控件的功能或图形界面。

相比从 UserControl 或现有 Windows 窗体控件继承来说,通过从 Control 类继承来创建控件需要花费更多心思和精力。 由于用户还需执行大量的实现,因此,控件可以具有比复合控件或扩展控件更好的灵活性,而且可以使控件完全满足自己的需要。

要实现自定义控件,必须为控件的 OnPaint 事件编写代码,它控制着控件的视觉绘制方式。 还必须为控件编写任何特定于功能的行为。 还可以重写 WndProc 方法并直接处理窗口消息。 这是创建控件的最强大的方法,但若要有效地使用此技术,需熟悉 Microsoft Win32® API。

时钟控件即是一个自定义控件,它复制模拟时钟的外观和行为。 调用自定义绘制来使指针移动,以响应来自内部 Timer 组件的 Tick 事件。

自定义设计体验

如果需要实现自定义设计时体验,可以创作自己的设计器。 对于复合控件,从 ParentControlDesigner 或 DocumentDesigner 类派生自定义设计器类。 对于扩展控件和自定义控件,从 ControlDesigner 类派生自定义设计器类。

使用 DesignerAttribute 将控件与设计器关联。

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

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

相关文章

MS3814:DVI/HDMI TMDS FR-4 和电缆均衡器/驱动器

产品简述 MS3814 是一款 TMDS 均衡 / 驱动器芯片,用于补偿 FR-4 和 电缆到 DVI/HDMI 连接器的损耗。提供完全满足 DVI/HDMI TMDS 要求的输出。芯片还可用于 DVI/HDMI 电缆以延长传输距离,提 高连接器接收侧电缆通道的抖动余量。片上 TMDS…

Prometheus 与 VictoriaMetrics对比

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享 时序数据库有很多,比如Prometheus、M3DB、TimescaleDB、OpenTSDB、InfluxDB等等。Prometheus和VictoriaMetrics是开源的时间序列数据库,在复杂的环境中提供了强大…

给充电桩嵌入一个强大的“心脏”——工控机

到底什么样的工控机才算是真正的好用? 小编还特地去问了技术老王 他表示:稳定第一,性能第二! 不稳定,性能再好也白搭! 什么是工控机呢? 工控机是一种专门为工业现场而设计的计算机设备&…

鸿蒙开发已解决The module to import is incompatible with the current project

文章目录 项目场景:问题描述原因分析:解决方案:心得体会:知识点OpenHarmony:HarmonyOS:项目场景: 报错: The module to import is incompatible with the current project 问题描述 希望通过 import module 将该模块引入到我的项目。 导入后出现错误,因为项目和模

JavaScript高级程序设计读书记录(八):对象的使用及创建

ECMA-262 将对象定义为一组属性的无序集合。严格来说,这意味着对象就是一组没有特定顺序的 值。对象的每个属性或方法都由一个名称来标识,这个名称映射到一个值。正因为如此(以及其他还未 讨论的原因),可以把 ECMAScri…

imx7开机自动执行任务(点灯)

前提: 已正确配置设备树,可以在用户空间控制GPIO。 启动脚本: 创建shell脚本xx.sh,给与执行权限chmod x xx.sh,以便当Linux启动时自启动执行。 #!/bin/bash# 设置GPIO引脚编号 GPIO_PIN166# 导出GPIO引脚 echo $GPI…

kubernetes Namespace Labels 详解

写在前面:如有问题,以你为准, 目前24年应届生,各位大佬轻喷,部分资料与图片来自网络 内容较长,页面右上角目录方便跳转 namespace 实现资源分组,label实现业务分组 Namespace 基础理论 最重…

使用 std::forward 的作用---完美转发

std::forward是什么 使用 std::forward 是为了实现完美转发(perfect forwarding)。 完美转发是一种技术,用于将函数模板的参数按原始类型转发给其他函数或对象。它可以保持原始参数的值类别(lvalue 或 rvalue)和 con…

科技创新创业

科技创新创业是一个涉及多个方面的过程,主要包括以下几个方面: 创意产生:创业的起始点通常是一个新的创意或想法,这可能是一个新的产品、服务或技术的概念。这个创意需要独特且具有商业潜力。市场调研:一旦有了创意&a…

行业赋能|同创永益出席数据中心业务连续性管理国标应用推广研讨会

2023年12月7日,ITSS数据中心业务连续性管理国标应用推广研讨会在上海交通银行浦江数据中心召开。来自交通银行、浦发银行、太平洋保险、上证数据、海通证券、国泰君安、申万宏源、太平保险、中债登、神州信息、翰纬科技、同创永益等单位20余名专家出席会议&#xff…

2024第15届电子教育、电子商务、电子管理和电子学习国际会议

第十五届电子教育、电子商务、电子管理和电子学习国际会议(IC4E 2024)将于2024年3月18日-21日在日本福冈举办。本次会议以电子技术为核心,围绕电子教育、电子商务、电子管理以及电子学习等各个方面展开研讨,为相关领域的专家学者们…

独孤思维:​做副业项目,保持平常心

做副业项目,保持平常心。 不能因为自认为很好的作品,数据不好看,就哭哭闹闹。 平常心,坚持日更,保持持续刷新自己,提升自己的飞轮状态。 不以物喜,不以己悲,哈哈。 无论是副业还是…

检查密码(字符串)

本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。 输入格式: 输入第一行给出一个正整数 N(≤…

2.SPSS数据文件的建立和管理

文章目录 数据文件的特点建立SPSS数据文件步骤 数据文件的结构变量的规则 数据的录入和保存录入数据保存文件 数据的编辑数据定位 数据文件的特点 SPSS数据库文件包括文件结构和数据两部分 SPSS数据文件中的一列数据称为一个变量。每个变量都应有一个名称,即&…

力扣 | 509. Fibonacci

509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 n …

自动计算薪资-全优学堂

功能说明 全优学堂薪资模块则根据基础薪资、历史上课情况、课程销售情况自动计算员工薪资,帮助您更好地进行成本管理。系统根据教职工的排班情况、课时数和提成规则,自动计算教职工的薪资,大大减轻工资管理负担。 #1. 基础薪资配置 设置本…

智能音箱喇叭底噪大的问题

智能音箱喇叭底噪大的问题 3w的喇叭,放大8到12倍。speaker外放模式. 播放时底噪声很大.可在播放时音量减到最小凑近听,发现在半米的范围内都能听到底噪声. 分析过程 引原始的pa输出线出来引功放处理后的音频信号输出线出来&…

积萨伯爵不懈追求恒久卓越,花为缘集团不断探索时尚的型格魅力

近年来,高端腕表凭借着卓越的制表技艺、悠久的制表历史以及不拘一格的美学特色,逐渐受到各大明星演员,时尚博主的青睐,成为他们出席各大重要场合,彰显个人品位和地位的时尚百搭单品。 积萨伯爵作为专业做培育珠宝和高…

复习python从入门到实践——函数function

复习python从入门到实践——函数function 函数是特别难的,大家一定要好好学、好好复习、反复巩固。函数没学好,会为后面造成很大困扰。 教科书中函数举例会稍微有点复杂。在此章复习中,我将整理出容易疏漏和混淆的知识点,并用最简…