日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

DotNet(C#)自定义运行时窗体设计器 一

發布時間:2023/12/31 C# 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DotNet(C#)自定义运行时窗体设计器 一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 由于項目功能的需要,要做一個運行時的設計器,首先想到的做法就是模仿VS2005的IDE設計器,有設計窗口,有屬性格等。剛開始由于沒有時間深入探討,通過監聽Windows消息的方法做了一個,效果不是怎么的好,后來經不斷的查資料,發現Framework已經提供了很好的類給我們調用VS IDE的設計器,設計終于走上正道,于是重寫了原來的代碼,實現了運行時設計的功能。

???? 我們開發使用到VS的屬性格,其處理錯誤的方式對開發人員來說沒有什么,但是如果我們把這種提示的方式交給客戶使用,客戶肯定是不滿意的,因此,我們還必須處理錯誤提示的形式。對于有些設計時的控件,其屬性或是唯一或是不斷遞增的,我們也必須要處理,不能給客戶每拖動一個控件,要做一大堆的設置,只顯示客戶需要的屬性,提供復制、撤消和恢復功能等。我們的設計器必須有一些智能化的功能在里面,用戶使用起來才覺得方便。

????? 在該設計器中首先使用到的控件是屬性格控件(PropertyGrid),此處使用了一個開源的屬性格擴展控件(PropertyGridEx)該控件對自定義屬性有很好的處理,這正是我需要的,該控件通過自定義屬性實現了一個消息的提示,相對Framework中的PropertyGrid有了更好的展現,但還不能符合我的要求,還有,對屬性更改的驗證比較麻煩,不靈活,于是本人對原碼進行了小的修改,增加了屬性更改前的驗證事件,允許開發人員對用戶輸入的數據時行驗證,由開發人員在些處向用戶作更好的提示,并取消不成功的修改。該修改可能使得控件的整體性差了點,但對開發人員來說更靈活了,可以實現很復雜的功能。該控件就不提供原碼了,需要的可以到http://www.codeproject.com/去搜索一下,對于更改前的驗證事件,大家可以去研究研究。在此處說說該控件的插曲:該控件(屬性格)中修改了某個值,代碼中是通過Microsoft.VisualBasic命名空間內的Interaction類實現,我相信該類和C#中的Type的反射差不多,于是在完成了整個IDE的設計后才發現,用鼠標或鍵盤移動控件,屬性格的值可以改變,但是在屬性格改變控件的位置后,控件是可以正常的起到設定的位置,但IDE的選中控件的窗口(Hook窗口)并沒有跟著移動,改變大小也是一樣。很長時間都找不到原因所在,后來無意在DesignSurface的代碼中發現使用的是TypeDescriptor進行賦值,于是把原認為沒有問題的PropertyGridEx的代碼更改,問題解決,我猜想,可以TypeDescriptor更改值的時候,可能內部會有一個消息通知機制,而一般的反射沒有,而DesignSurface是通過在內部監聽屬性更改的消息而有所動作(沒有反射Framework的程序集研究)。

效果圖如下:

?

?

待續...

轉載于:https://www.cnblogs.com/Yjianyong/archive/2010/05/25/1743970.html

總結

以上是生活随笔為你收集整理的DotNet(C#)自定义运行时窗体设计器 一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。