第二階段WinForm-11:自定義控件

1_繼承鏈

(1)Form1的繼承鏈:Form1==>Form==>ContainerControl==>ScrollableControl==>Control

(2)Button的繼承鏈:Button==>ButtonBase==>Control==>Component

2_自定義控件

(1)C#中控件和組件的區別

一般組件派生于:Component類,所以從此類派生出的稱之為組件。 一般用戶控件派生于:Control類或UserControl類,所以從該類派生出的稱之為用戶控件。 他們之間的關系主要是:UserControl繼承Control繼承Component。

概括:組件包括控件,控件肯定是組件,但組件不一定是控件。

控件的突出特點:就是交互式組件(能動,能和客戶交互),而用戶控件則是將某些特定的組件或控件復合從而實現特定的業務功能。 c#組件和控件的區別-OK_c# 控件 組件 區別-CSDN博客

(2)控件包含兩種

  • 官方控件:自帶的,例如Button,Label等

  • 自定義控件:包含三種

    • 完全自定義控件:繼承自Control類

    • 擴展控件:繼承自某個具體的控件類,例如Button,Label

    • 復合控件:繼承UserControl類,又稱用戶控件UserControl。即:把多個控件通過組合的形式,形成更大,功能更全的控件。

(3) 完全自定義控件繼承Control,不是繼承UserControl,VS2022中沒有提供定義完全自定義控件的模板。

  • 方法1:通過用戶控件,改寫成完全自定義控件。

  • 方法2:通過組件,改寫成完全自定義控件

  • 方法3: 通過類文件

  • 通過用戶控件改寫后,把錯誤修復一下即可。InitializeComponent()中的this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 去掉 添加 components = new System.ComponentModel.Container();即可!

3_自定義控件示例

(1)完全自定義控件:MyLable,繼承自Control

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
?
namespace _02_自定義控件
{// 完全自定義控件繼承Control,不是繼承UserControl,VS2022中沒有提供定義完全自定義控件的模板。// 1.方法1:通過用戶控件,改寫成完全自定義控件。// 2.方法2:通過組件,改寫成完全自定義控件// 3.方法3: 通過類文件
?// 通過用戶控件改寫后,把錯誤修復一下即可。// InitializeComponent()中的this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 去掉  添加 components = new System.ComponentModel.Container();即可!
?public partial class MyLable : Control{public MyLable(){InitializeComponent();//鼠標移入的事件this.MouseEnter += MyLable_MouseEnter;//鼠標移出的事件this.MouseLeave += MyLable_MouseLeave;}private void MyLable_MouseLeave(object sender, EventArgs e){TextColor= Color.FromArgb(22, 95, 160);//鼠標樣式Cursor = Cursors.Arrow;Refresh();}
?private void MyLable_MouseEnter(object sender, EventArgs e){TextColor = Color.Red;Refresh();//重繪頁面Cursor = Cursors.No;}
?
?// <summary>/// 對畫布的配置,讓畫面畫出來的圖像更清晰 質量更高/// </summary>/// <param name="g"></param>private void setGraphics(Graphics g){
?//設置合成模式為源覆蓋g.CompositingMode = CompositingMode.SourceOver;//合成圖像的時候,使用高質量模式g.CompositingQuality = CompositingQuality.HighQuality;//抗鋸齒(讓畫筆,畫刷平滑些 更清晰)g.SmoothingMode = SmoothingMode.AntiAlias;//設置插值模式為高質量雙三插值g.InterpolationMode = InterpolationMode.HighQualityBicubic;
?}
?//完全自定義控件要求://1.必須繼承Control類//2.需要重繪(開發者自己畫控件),需要重寫一個OnPaint();//3.考慮閃屏(雙緩沖),固定配置
?protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);//調用基類OnPaint方法  可以省略 不省略建議寫到第一行
?//如何畫圖: 使用GDI和GUI 后續詳解//畫板  畫筆  畫刷  畫筆的顏色 畫筆的粗細.....Graphics g = e.Graphics;//畫布setGraphics(g);
?//SolidBrush brush = new SolidBrush(TextColor);
?//畫矩形RectangleF rectf = new RectangleF(5, 5, this.Width - 10, this.Height - 10);
?//把矩形填充顏色g.FillRectangle(new SolidBrush(Color.Gray), rectf);g.DrawString(MyText, font, brush, rectf, Format);
?}
?private Font font = new Font("宋體", 9);
?private Color textColor = Color.FromArgb(22, 95, 160);
?[Description("文本顏色")]public Color TextColor{get { return textColor; }set { textColor = value; }}
?[Description("文本內容")]public string MyText{get { return Text; }set { Text = value; }}
?private StringFormat format = null;
?[Description("設置文本的對其格式")]public StringFormat Format{get{
?if (format == null){format = new StringFormat();format.Alignment = StringAlignment.Center;//水平居中format.LineAlignment = StringAlignment.Center;//垂直居中format.FormatFlags = StringFormatFlags.NoWrap;//不換行format.Trimming = StringTrimming.EllipsisCharacter;//超出的時候顯示成省略號...
?}
?return format;
?}
?}}
}

(2)自定義MyTextBox控件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
?
namespace _02_自定義控件
{//把一個用戶控件改寫成擴展控件, 只需要把用戶控件 改成具體的控件類即可public partial class MyTextBox : TextBox{public MyTextBox(){InitializeComponent();}
?
?//[Description("文本框的背景顏色")]public Color MyBakcColor{get{return BackColor;}set{BackColor = value;Refresh();}}}
}
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97317.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97317.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97317.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【2025 完美解決】Failed connect to github.com:443; Connection timed out

文章目錄前言1. 生成并上傳 SSH Key2. 寫 SSH 配置&#xff0c;強制走 ssh.github.com:4433. 連通性自檢&#xff08;看是否能握手成功&#xff09;4. 克隆5. 驗證前言 今天和往常一樣&#xff0c;寫完代碼&#xff0c;準備 push 到 github 倉庫中&#xff0c;結果發現一直卡在…

C++基礎(③反轉字符串(字符串 + 雙指針))

題目描述&#xff1a;編寫一個函數&#xff0c;將輸入的字符串反轉過來&#xff08;要求原地修改字符串&#xff0c;不使用額外空間&#xff09;。 示例&#xff1a;輸入 s ["h","e","l","l","o"] → 輸出 ["o",…

vue的動態組件keep-alive實現組件緩存和狀態保留

在 Vue.js 中&#xff0c;動態組件結合 keep-alive 是實現組件緩存和狀態保留的重要技術方案。以下是詳細解析&#xff1a;一、動態組件基礎 通過 <component :is> 實現組件動態切換&#xff1a; <component :is"currentComponent"></component>cu…

安裝Docker Desktop報錯WSL needs updating

&#xff08;1&#xff09;首先觀察下面是否勾選&#xff08;2&#xff09;說明已經啟動了&#xff0c;但是需要更新&#xff0c;cmd運行下面代碼&#xff0c;記得需要開一下代理&#xff0c;可能會有點慢上面就算好了&#xff08;3&#xff09;點擊restart這樣就代表成功了

??舊衣回收小程序|線上模式新升級

還在用老舊的傳統方式做舊衣回收&#xff1f;別out了&#xff01;線下回收箱成本高、維護難、用戶參與感弱&#xff1f;是時候用線上小程序打開全新局面了?&#x1f4a8;線上小程序 vs 傳統線下回收? 便捷性突破&#xff1a;線下&#xff1a;用戶需親自送至固定回收點&#x…

CD71.【C++ Dev】二叉樹的三種非遞歸遍歷方式

目錄 1.知識回顧 2.前序遍歷 分析 總結入棧的幾種可能 循環的條件 代碼 提交結果 3.中序遍歷 分析 代碼 提交結果 3.★后序遍歷 分析 問題:如何確定是第一次訪問到棧的元素還是第二次訪問到棧中的元素? 方法1:使用填充的內存(依賴于架構) 判斷計算機使用的架構…

音視頻學習(五十九):H264中的SPS

在 H.264 (也稱為 AVC, Advanced Video Coding) 視頻編碼標準中&#xff0c;SPS (Sequence Parameter Set) 是一個至關重要的 NALU (Network Abstraction Layer Unit) 類型&#xff0c;它承載著整個視頻序列共有的全局性配置信息。你可以把它理解為視頻文件的“基因”&#xff…

linux實時性研究

Linux 實時性研究旨在提升 Linux 系統對外部事件的響應速度和確定性,使其能夠滿足實時應用的需求。以下是關于 Linux 實時性研究的一些關鍵內容: Linux 實時性不足的原因 中斷優先級問題:在標準 Linux 內核中,中斷具有最高優先級,包括軟中斷,這使得實時任務的優先級得不到…

Java-面試八股文-Mysql篇

MySQL篇 1、Select 語句完整的執行順序 難度系數&#xff1a;?&#x1f4cc; SQL SELECT 語句書寫順序&#xff08;開發者寫的順序&#xff09; SELECT ... FROM ... JOIN ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...&#x1f4cc; 實際執行順序&#…

多代理系統架構:Supervisor 與 Swarm 架構詳解

多代理&#xff08;Multi-Agent&#xff09;系統正成為構建復雜 AI 應用的重要范式。本文將深入剖析兩種熱門的多代理架構模式——Supervisor&#xff08;主管模式&#xff09;與 Swarm&#xff08;群智模式&#xff09;&#xff0c;揭示它們的執行流程、適用場景及實現細節&am…

【深度學習】思維鏈(Chain of Thought, CoT):提升大模型推理能力的關鍵技術

思維鏈&#xff08;Chain of Thought, CoT&#xff09;&#xff1a;提升大模型推理能力的關鍵技術 文章目錄思維鏈&#xff08;Chain of Thought, CoT&#xff09;&#xff1a;提升大模型推理能力的關鍵技術1 什么是思維鏈&#xff08;Chain of Thought, CoT&#xff09;&#…

GitHub 宕機自救指南:打造韌性開發體系

一、引言1.1 GitHub 宕機事件回顧與影響剖析在軟件開發的廣袤版圖中&#xff0c;GitHub 宛如一座熠熠生輝的燈塔&#xff0c;為全球超 1 億開發者照亮前行之路&#xff0c;其重要性不言而喻。它集代碼托管、版本控制、協作開發以及項目管理等核心功能于一身&#xff0c;是無數開…

移動端網頁調試實戰,iOS WebKit Debug Proxy 的應用與替代方案

在移動端開發中&#xff0c;iOS WebView 的調試一直是個難題。不同于 Android 可以依賴 Chrome DevTools 和 ADB&#xff0c;iOS 的 WKWebView 只能通過 Safari 開發者工具調試&#xff0c;而這需要 Mac 環境和設備直連。為了彌補限制&#xff0c;社區出現了一個常用工具 —— …

煥新升級,Sermant 2.0.0 release版本重磅發布!

Sermant社區在6月底正式發布了2.0.0 release版本&#xff0c;這次更新中&#xff0c;Sermant進行了項目所屬組織調整并新增了基于xDS協議的服務發現能力、預過濾啟動加速機制、Sermant Backend的配置管理能力。所屬組織調整使得Sermant淡化廠商屬性&#xff0c;以全新的姿態更好…

sqli-labs通關筆記-第28a關GET字符注入(多重關鍵字過濾繞過 腳本法)

目錄 一、sqlmap之tamper腳本 二、源碼分析 1、代碼審計 2、SQL安全性分析 三、滲透實戰 1、進入靶場 2、tamper腳本 3、sqlmap滲透 SQLI-LABS 是一個專門為學習和練習 SQL 注入技術而設計的開源靶場環境&#xff0c;本小節對第28a關Less 28a基于GET字符型的SQL注入關卡…

聯想打印機2268w安裝

聯想打印機2268w是支持無線打印的。在某度搜索&#xff0c;掀起蓋子長按開機鍵&#xff0c;成功初始化。之后按說明應該能用手機搜索到打印機的熱點&#xff0c;反復搜索都沒有出現。最后沒辦法&#xff0c;之后好用我自己的方法安裝。找了個筆記本&#xff0c;開機連接到wifi,…

【LeetCode】動態規劃——72.編輯距離、10.正則表達式匹配

LeetCode題目鏈接 https://leetcode.cn/problems/edit-distance/description/ https://leetcode.cn/problems/regular-expression-matching/description/ 題解 72.編輯距離 本題要定義為長度為i、長度為j的字符串的最少編輯次數&#xff0c;每次判斷字符的下標為i-1、j-1。dp[i…

[親測可用]Android studio配置國內鏡像源 Kotlin DSL (build.gradle.kts)

一、更改gradle下載鏡像Android studio項目需要下載和更新 Gradle 及其依賴。由于網絡環境&#xff0c;直接從 Gradle 官網下載可能會遇到速度慢或超時的問題。這里需要更換為使用國內的鏡像站點來加速下載。官網地址&#xff08;較慢&#xff09;&#xff1a;https://services…

《跳出“技術堆砌”陷阱,構建可演進的軟件系統》

很多團隊陷入了“技術焦慮式開發”—盲目追逐熱門框架&#xff0c;將“使用微服務”“引入云原生”“集成AI組件”當作架構先進的標簽&#xff0c;卻忽視了業務與技術的底層匹配邏輯。某互聯網團隊為了“彰顯技術實力”&#xff0c;在內部協同工具中強行接入機器學習推薦模塊&a…

賦能你的應用:英超實時數據接入終極指南(API vs. WebSocket)

在當今數據驅動的時代&#xff0c;為您的應用程序注入實時、準確的英超賽事數據&#xff0c;是提升用戶體驗、打造差異化競爭力的關鍵。無論是開發一款球迷必備的比分追蹤App&#xff0c;一個深度專業的賽事分析平臺&#xff0c;還是一個充滿互動性的夢幻足球游戲&#xff0c;首…