当前位置首页 > 汽车/机械/制造 > 其它机械及制造相关文档
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

win自定义控件开发

文档格式:DOCX| 16 页|大小 977.93KB|积分 20|2022-08-22 发布|文档ID:139701836
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 16
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 自定义控件开发一般而言,Visual Studio 2005中自带的几十种控件已经足够我们使用了,但是, 在一些特殊的需求中,可能需要一些特殊的控件来与用户进行交互,这时,就需要我们 自己开发新的、满足用户需求的控件要开发自己的控件,有几种方法:❶复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控 件,来满足用户的需求❷扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控 件,增加新的功能,或者修改原有功能,来满足用户需求❸自定义控件 (Custom Controls): 就是直接从 System.Windows.Forms.Control 类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方 法,但是,对开发者的要求也是最高的要实现一个自定义控件,必须为Control类的 的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作同时,还可 以重写Control类的WndProc方法,来处理底层的Windows消息所以说,要实现一个 自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。

    下面我们就分别给大家介绍这三种方法❶复合控件(Composite Controls)复合控件实际上是控件的集合,类似于堆积木因此,可以按照用户的需求,把VS 2005工具箱中的控件任意组合起来,形成一个复合控件在以后使用中,将生成的这个 复合控件作为一个控件来对待复合控件一般都是从UserControl类派生而来,因此复合控件(用户控件)可以在 “UserControl测试容器”中进行测试复合控件的创建步骤:第一步:新建—个 Windows 控件库项目“CompositeControlDemo”项目类型⑥:□- Vi su:il C#nindows,司Windows应用程序智能设备Windxiwm 服务初学者工具•包XNA Game Studio 约 I」税的模板搜索联机模校...用于创建在Windows应用程序中使用的控件的项目|C orrip o s i teControlD emo名祢但):V削建解决方案的目录(①应置0:E-真他语s/布式系统解决方案田耳他项目类型亩“'测试项目S-以引用.I 解决方案"匚omposi teControlDemo" (1 个项目)CoapositeControlDeaoS- 1^1 Froperti解决方案名称近):Composi teControlDemo曰浏览值)…眼消第二步:向复合控件中添加Visual Studio 2005中的控件组合。

    解决方案资源管理器-解决方案“Compo. . . ▼ P X_」解决方案 C omp o5 i t eContr olll emo(1 个项目)I白…l亲! CoapositeControlDeaoE- I'r op er t i e s由…画31用 MyDi gi talClock. csS-国 ■■… 窗 MyD i gi t alClock. He si gner. c egm解决方案资源管理器|专类视图|画动态帮助添加了一个Label控件和Timer控件Label控件的Text属性设置为””,Timer控件的Interval属性设置为1000毫秒,即 1秒,同时,将Enabled属性设置为True设置Timer控件的Tick事件,并添加代码第三步:向复合控件添加属性 我们添加了一个前景色和背景色属性private Cnlnr c ulFC olor:private Cnlnr c ulBC olor:publ i c C ol or Cl o ckEiaukColorgetr e tmTL c olBC ol or:Lc ulBC ul or = v:=ilue :IblDi spl ay. BaukCqL" 二 >z olBCol or:publi c Color Clu ckF oreColorgetreturn culFCulor:Lc ulFC ol or 二 value:;IblDi splay. ForeCulor = culFColor:第四步:生成复合控件直接按F5,或者点击“生成”菜单,选择其中的“生成解决方案”菜单向,就可以生成 复合控件。

    我们可以看到,生成的复合控件是以.dll文件的形式存在的文件夹I日 _l 匚o e i t eC orLtrolIl errn:i3 CompositeCorLtrolIierno日目binDebug田 p obji£) Properti es翅二 国织omposi teContr olDemo. dll 困 Cornposi teControlDemo. pdb第五步:把复合控件显示在工具箱中,并设置相应图标1. 把复合控件显示在工具箱中2. 设置复合控件在工具箱中的图标这里,我们可以看到,复合控件被加入到工具箱中了,但是使用一个默认的图 标显示的(小齿轮),要在工具箱中显示一个我们自定义的图标有两种方法,这里我们 先讲第一种[ToolboxBitmap(typed(Button))][ToolboxBi tmap (typeo£ (Timer ))]publi c p:=ii-1i al class MyDi gi t:=ilClock : UserCuritrulpri vate Culor c olFC ulor:pri vate Culor c olBC ulor:piibl i c C ul or Cl o ck£!acldZ ul ur|„ „ „ | publ i a C ul or Clo ckF oreC olurj, „ J publ i a MyD i gi t:dlCluck ()|„ „ . |pr i vat e vo i d tmrMai n_T i ck (obj ect s erider^ Event Ar gs e)IblDi splay. Text 二DateTime. Now. TuLungTimeString ():I程序集名称I命名空间System. Web.HI. WebControlsSystem. Web(2. o.o.o)全扃程好Mi crosoft. 0£fi ce. ToolsMicrosoft.Office. To...全扃磨Mi cr0soft. Vi sualBasi c. Co...M i cr o s o £t.Vi su:alEas...全局程AMi ci"osoft. Vi sualBasi c. Co...Mi crosoft.Visu:alBas...全局程5System. Web. l-Q. MobileCont...System. Web.Mobile (...全局程FSystem. WeL. Ul. VebControlsSystem. Web(2. 0. 0.0)全局程5System. WeL.Ul. WebControl...System. Web(2.0. 0.0)全局程5Mi ci"osoft. Offi ce. Tools. 0...Mi crosoft.Office. To...全局程消除⑥ |训览⑥...」I命名空间I程序集名称 ~-nMessageQueueMessageQueue MessageQueuelnst. M on th匚 al e ndar M on th匚 al e ndar MultiViewMyDi gi tai匚lockSystem. MessagingSystem. MessagingSystem. MessagingSys t em. W i ridows. F orm sSys t em. W i ridows. F orm s System. Wmb. UI. WebConti-ols Comp■ si teC■:'ritrolDemoSys tem. Mess agi ng (.2. Sys tem. Mess agi ng (.2. Sys tem. Mess agi ng (.2. Sys tem. Wi ridows. F orm. Sys tem. Wi ridows. F orm. System. Web (2. 0. 0. 0) Compo s i t eCont_r olD em..全局程F.D:\Micr.全局程P•全局程」.D:\Micr全局程F..F:L应用MyDi gi talClockComposi teControlDeni.Composi teControlDemo■谛选器建):「活除(E) |—MyDi gi talClock —肉语言: 固定语言(固定国家/地区)为 版本: 1.0.3Q48.38139 俊布)洌览电)…|F:\®确定 I 职消 I 重置®第六步:测试复合控件其实,当我们直接按F5生成复合控件时,会弹出一个“用户控件测试容器”,在这 个容器中,显示了我们的复合控件MyDigitalClock的运行情况,同时在其右侧,还有 一个属性窗口,通过改变属性窗口中的属性设置,就可以改变复合控件的相应状态。

    比 如,我们修改一下ClockBackColor属性和ClockForeColor属性(即设置一下背景色和 前景色),可以看到,MyDigitalClock控件的样子发生了变化上面是通过“用户控件测试容器”来对复合控件进行测试,实际上,我们还可以通 过创建一个新的Windows项目来对复合控件进行测试1.新建一个测试项目“TestCompositeControls”解决方案资源管理器-TeHC. . . ▼ P X尴宙囱益_ J 解决方案,' Compoei teControlll emo-' (2E ".刷 C omp o e i t eC ontrolD emoTeEtConpoti teControlB-[j- 国 Prop er ti es亩…目引用E "崖]Forml. >ze■■…Frogi■:am. ce11gg解决方案资.类视图I通动态帮助2.将复合控件" MyDigitalClock ”添加到窗体中3. 设置MyDigitalClock控件的属性4. 按F5运行,观察窗体中的MyDigitalClock控件解决方案资源管理器-藤决...▼毕X♦I | 公解决方案资野类视图|词动态帮助扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控 件,增加新的功能,或者修改原有功能,来满足用户需求。

    扩展控件保留了原来控件的界面、属性、方法,同时还可以扩展原有控件功能,实 现新的功能,满足用户需求扩展控件可以在两方面进行扩展:1. 扩展用户界面,界面上有所变化,使界面更好看界面上要有所变化,就要重载OnPaint方法,对原有控件的界面进行重新绘制2. 扩展功能,功能上有所加强功能上有所加强就是指增加新的功能,满足用户需求创建扩展控件的步骤: 第一步:新建一个类库项目富街囱I回益解决方案 ^ExtendedControlzDemo" (1I-.囹 Ex t ende dC ontr olsDeao+ Properties+ 日引用XFButton. cs! •曹第二步:添加引用和继承比如我们要扩展Button控件,就要添加包含Button控件的程序集俎件名称土i 路径-I蛆件名称▲ I版本 I运行库 I路径▲[mt |com |项目|询览|最近|Jjxl解决方案资源管理器-解决...▼卒X解决方案资源管理器-解决...▼以X0System2ManagementMessagingRuntime. RemotingV.TSharDCodeProvi der2. U. U. 0n. Windows. Forms0577.c7\q5... CAV:5. .. CAW:5. .. CAW:5. .. C:\V:5. .. C:\V:5. .. C:M:5. .. CAW:5. .. CAW:5. .. C:\V:000000U.I 确定 I取消唱I首屋11国益1+1 ,ll Proper ties□云弓I用•Q System>O SystemQ System Xml回(FRuttSystem. Confi gar at i on. InstallSystem. DataSystem. Data. OracleClientSystem.Data. SqlCli entSystem. Data. S qlXmlSys t em. D epl ojiri entSystem. Desi gnSystem.DirectoryServi cesSystem. DiractoryServi ces. ProtocolsSy s t em. Dr aw i ng. D e s i gn System. EnterpriseServi c e sSystem. ManagementSystem. MessagingSYstem. Runtime. Remotinz同时,继承自 System.Windows.Forms.Button0. 0. 00. 0. 00. 0. 00. 36...0. 0. 00. 0. 00. 0. 00. 0. 00. 0. 00. 0. 00. 0. 00. 0. 0!5 七……了 郴据据\M\W据据\w郴雌仰/郴据业确定 | 取消解决方案资源管理器-解决. . •_ J 解决方案 Ci Ek t ends dContr ol eH emo(1I白…Ex t ende dC ontr olsD ea o£]■■• Properti es日…」引用…--Q System O System. Data O System. W i rulow e . F orm e O SyEtem. XmlXPButton. ce<1gm解决方案资.耳类视图I司动态帮助fl?决方案((ExtendedControlsDeinow (1白...ExtendedC ontr olsDeao(3 Proper 11 *s□ L? ;l用•O SystemSystem Jats-O System 'Vincows Forms•O System Xml辑 XPButtun. cs妇 」 上冬解注方案资...|烫类视图〔囱动态帮助System.Windows.Forms第三步:重载OnPaint方法,扩展用户界面,或者增添新的功能iie i ng Sys t em. W i ndow e :nisi ng Sys tem. Dr aw i ng:us i ng Sys tem. Dr aw i ng. Dr aw i rig2Il:L using System. W indows. Forms:修13拳1书15:低17:18N327 i28^3197:198N3204205hl£14:215^216^3222^223hl233;234^3240 ;-纣L3 nam已space Ext已nd已dContrulsDemu[T o olb oxE i tm ap〔typ e o f (Ent t on))]publi c clase XFButton : System. W ind□胃e . Furme . Buttunprivate b u ul m due eover 二 £al§ 已:pr a t e i: t e dpr u t e c t e dpr a t e i: t e doverri deuverri deuverri deoverri devo i d OriF aint (Sys tem. Wi nd owe . F orm e. Fai n tE vent Ar gs e )|. „ Jvo i d OriLeaTH (Even+Ai-gE e)|, , Jvo i d OriM ous HEnt er (EventAi_ gs e )" ]vui d Oriilo t i £yMess age (Sys t em. W indn胃e. F orme. Mess age m)一 ]vui d OrJiloilseLeave (ETentAi_gs e)|.,vu i d OriF ai rLtBackgi-oiiTLii (Sys tem. W i e . F arm e. Pai n tE vent Ar gs p event . J第四步:生成扩展控件直接按F5,或者点击“生成”菜单,选择其中的“生成解决方案”菜单向,就可以生成 复合控件。

    我们可以看到,生成的扩展控件是以.dll文件的形式存在的文件夹 X名称sEx t eriile idC ontr ol sll em o. dll IH li2^ Ex t ende dC ontr ul eD em u ▲ |H Ex t htliIh dC uritrul sD emu日(£) bin_ .ExtendedControlEDemo. pdbD ebug第五步:把扩展控件显示在工具箱中,并设置相应图标与复合控件相同第六步:测试扩展控件复合控件一般都是从UserControl类派生而来,因此复合控件(用户控件)可以在 “UserControl测试容器”中进行测试但是,如果对于扩展控件,一般都不直接从 UserControl类派生的,而是从需要扩展的那一类控件本身,就像我们后面要讲到的 XButton扩展控件一样,它是从从Button类继承的,是以添加一个类的方式加到项目里, (复合控件是以一个控件库项目,待查证),这时测试就没有办法在“UserControl测试 容器”中进行测试,只能新建一个Windows应用程序来对扩展控件进行测试添加一个测试项目解决方案资源管理器- TestExtened. . . ▼ X解决万案资源管理器l±J 色)S生成解决方案但) 重新生成解决方案母) 活理解决方案(£) 批生成(X)...配置管理器@).一现有项目但)... 新建网站也)… 现有网站值)...设置启动项目(A). ■ •粘贴©重命名(M1新建分布式系统关系图皿〕.一新建项也)一.现有项⑥I...新建解决方案文件夹如属性®DJLSJUe・O ffl+gXJ 奢】黑!3:BeburlAnv CPUP x个项目)■ xCa街翌员 J 解决方案'ExtendedControlsDemo" (2 个项巨H ExtendedControIeDcbo由… 座]Properti es1亩…座I引用:…< XFButtori. ceS- S - 园 Froperti es由…巨引用由…围Forml. n■■…|袒 Frogi■:am. ceTestExtenedControls±1gm解决方案资源管理器J受类视图I阍动态帮助自定义控件(Custom Controls):直接从 System.Windows.Forms.Control 类派生, 也就是完全由自己来设计、从头开始创建一个全新的控件。

    这是最灵活、最强大的方法,但是,对开发者的要求也是最高的要实现一个自定义控件,可以使用Control类提供的最基本的功能Control类提供了创建一个控件所需要的基本功能,包括鼠标和键盘处理事件等, 但是,要注意的是,Control类没有提供创建一个控件所需要的图形界面和特定的功能 因此,要创建一个自定义控件,必须自己来绘制控件的界面和特定的功能要绘制自定义控件的界面,必须在OnPaint事件中编写代码,在OnPaint事件中实 现自定义控件的绘制工作同时还可能重写Control类的WndProc方法,来处理底层的 Windows 消息所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+ 和Windows API的知识创建自定义控件是开发自己的控件三种方法中最复杂的,因为,控件长什么样子, 自己来写;控件有什么属性,自己来写;控件用什么功能,自己来写创建自定义控件的步骤:第一步:新建一个类库项目(直接从Control类派生)或者 新建一个Windows控件库 项目(从UserControl派生)第二步:添加引用(如果是直接从Control类派生才需要)一般而言,自定义控件都有相应的用户界面,因此,至少需要添加System.Windows.Forms 的引用第三步:重写OnPaint事件,绘制用户界面第四步:向自定义控件添加属性和实现功能第五步:生成自定义控件第六步:把自定义控件显示在工具箱中,并设置相应图标第七步:测试自定义控件 自定义控件的测试:如果自定义控件是从Control类派生的,那么,自定义控件就不能在“UserControl 测试容器”中进行测试,只能新建一个Windows应用程序来对自定义控件进行测试。

    当然,自定义控件也不一定非要从Control类派生,也可以从UserControl类派生 而来,如果是从UserControl类派生而来,就可以在“UserControl测试容器”中进行 测试创建自定义控件的步骤:第一步:新建一个类库项目(直接从Control类派生)或者 新建一个Windows控件库 项目(从UserControl派生)解决方案资源管理器-解决方案■ ¥ x是|皆国田□益.[解决方案 “沁 t omC outr顼 em o ” 口 个项 目) 白…j^l CuetoaControIeDgboE- Fropei'ti esUserClock. cE-回强 曾| Us ei'Cl o ck. Il e s i grier. c s.解决方案资源管理器电类视图|蓟动态帮助第二步:添加一个Timer控件,并设置属性和事件private vui d timer 1 _Ti ck (obj ect eendei-j ETen+Ai-gs e)thi e. Time 二 Dat eTime. Hnw ;第三步:重写OnPaint事件,绘制用户界面I片设胃绘画的坐标变换/『绘回范围算面月绘画时针.,计算旋转的度数有绘画普针有篷画秒针private to i d U e er Cl o ck_F ai nt (obj e c t Eender^ FairitEverLtAi-gE e)Gr aphi c e de 二 e. Graphi ce ;Fen pn 二 iLew Fen (ForeCulor):Suli dBruwh br - ne胃 Suli dBruwh (F oreCulor):Ini tC o or di nat e s(de):DrawDuts (de, br):IlKawHuiji-H:±rLd (dc^ pn):DrawS e c 口rLdHarul (dc^ pn):Dr awM i nut 巳HaTLd (de. pn):〃设置绘画的坐标变换publ i i: to i d Ini tC o or di nat e e〔Ge aphi c e de )if〔thin Width == 0 | | this. Height == 0) retuiTi;de. Tr ansi at eTrans form (thi e. Width / Z. thi e. Height / 2): 〃平移坐标原点 调整比例大小 _de. ScaleTransform (this. Height / 250F, this. Width / 250F): i' i'绘1®1?B围界面publ i c vo i d Hr awD o t s (Gr aphi c e de, Erumh brush)int iSi ze;for (int i=0; i <:二 59; i++)i£ (i % 5 二二 0)iSize = 15;elseiSize = 5;de. FillEllipse (briish, -iSize / Z, -1UU - iSize / Z. iSize, iSize): de. FlotatpTf:±tlsform (6):片绘画时针,计算旋转的度数pr u t h c t p d vi r tu:±l vo id Dr awHour Hand (Gr aphi c s gr fx, F en pn)//为了保持原先的绘画状态Graphi csState 江邑 = fx. Save()://戒个小时一共36口度,一刻钟明度|gi_£x. RutateTr:drLEiurm (360. OF :*: Time. Huin- / 12 + 30. OF :*: Time. Minute / 60)gi_ix. DrawLine (pr^ 0, 0^ I* _50):gi_ £x. FLes tnre (gs):月绘画:分针 _pr u t e r t h d vi r tual to i d Dr awM i nut 已Hand (Gr aphi c s gr Ej F en pn)Gr aphi ceStat e ke = pi_tx. Save ()://m:y-钟&度 _ _gi_£x. RutateTr:±rLE£urm (360. OF :*: Time. MirLute / 60 + 6. OF :*: Time. Secund / 60)gi_£x. IlrawLine (prLj I* 0, 0, _70):gi- £x. Re st ore (gs);.〃雄画秒针 「 _pr u t e a t e d vi r tual vo i d Dr awS e c 口口也的品(Gr aphi c e gr tx, F en pn)Graphi ceS + ate gs 二 grfx. Save ():grfx. FlotateTrqtefarm (360. OF * Time. Second / 60):grfx. DrawLine (pn, 0, 口. 口,-100):gi-fx. Resture (gs):第四步:生成自定义控件第五步:测试自定义控件也可以新建—个 TestCustomControls项目ActiveX控件(可以考虑不讲)实际上还有一种控件没有给大家将,那就是ActiveX控件。

    Micmsott-微软(中司>有眼公司Microsoft' 微软(中国 >有跟公词• ActiveX是一个Microsoft的术语,它指的是一组包括控 件,DLL和ActiveX文档的组件,它通常是以动态链接库的形式存在,因此必须在一个叫容器的独立执行软件中运行 这样的容器庖括Authorware、Delphi, Visual Basic. Visual C+ + . Internet Explorer和Access等等• ActiveX控件数据输入和函数功能执行都必须通过容器,因此ActiveX控件和容器都必须支丹一些特建的接口协议根据Microsoft相应的规格标准,ActiveX控件应具备如下 的性能机制属性和方法;ActiveX控件必须提供属性的名称、方法的名称及参数,通过这项机制容器可以存取和改变ActiveX控件的属性参数事件:ActiveX控件由这顼机制通知容器在ActiveX控件中发生的 事件,比如属性参数的改变,用户按下鼠标左键等存储:容器由这项机制通知ActiveX控件存储和提取有关信息数据 等ActiveX控件只要在Windows的Registry数据库中 注所后,就可以彳象其他Windows应甬程序一梓发 挥各自的功能。

    ActiveX控件是一个模块化的灵活对象,如果某个 应用程序或网页需要增加一项特殊的功能,无须 重写整个程序,只要灵活地插入一个具有此项功 能的ActiveX控律即可实现ActiveX的优势逐在 于它的动态可交互性,用户可以动态地浪使用过 程中,通过改变它的属性和参数,在应用程序中 实现自己的特殊要求。

    点击阅读更多内容