Winform自訂表格單(轉)

來源:互聯網
上載者:User

標籤:design   attribute   pac   OLE   複雜   編輯器   name   sha   lin   

出處:http://www.newlifex.com/showtopic-167.aspx

好吧,附件真的損壞了,原始代碼我也沒有了,再提取我也沒精力了,不好意思,哪位之前下過可以重發一遍嗎?不過即使沒有也可以參考下面幾個樣本很快就可以做出來了......

最近在做個項目,業務方面較繁瑣,使用者需要自訂資料庫,也就是石頭開源的魔方所提供的功能,但winform實現自訂表格單,這個......
在網上搜尋了前人的代碼發現以下幾個參考意義:
http://www.codeproject.com/Articles/24385/Have-a-Great-DesignTime-Experience-with-a-Powerful
http://www.codeproject.com/Articles/60175/The-DesignSurface-Extended-Class-is-Back-Together
http://www.cnblogs.com/michael-zhang/articles/655267.html
http://www.cnblogs.com/pvistely/archive/2006/02/09/327656.html

不過功能都不是很全面,相似之處都是在SD中提取的,哈哈。
把這幾個例子整合了一下,發現還缺少最重要的功能對設計表單的序列化功能都沒有啊,於是重新翻閱了一個SD3.2的原始碼把XmlForm相關的代碼提取出來,然後用XML to Linq重新修改了一遍,如下,介面是用dotnetbar組件:



由於整個編輯器關聯太多東東,所以我只把核心功能提出出來,有興趣的朋友可以看看,由於時間關係,功能表命令我只添加了有限的幾個,完整的可以自己添加看看效果,全在原始碼中。
還有自訂屬性在資源檔中Properties.xml設定,由於我用的是多語言套件的,所以在分享的原始碼中屏蔽了部分代碼,在HmCustomProperty類中進行設定,大家看看就會懂的。

另外如果有些控制項的屬性對象複雜的話,需要對這個屬性單獨進行序列化,需要在DesignSurfaceExt類的GetElementFor方法和XmlLoader類的SetAttributes方法中分別設定,我用的是SharpSerializer來實現屬性對象序列化的。

還有就是比較複雜的控制項如Tabcontrol之類的,也需要自己單獨設定,大家可以查看一下sd的原始碼看看。

還有一個問題沒有解決,如果在設計表單中使用快速鍵,我把sd中的FormKeyHandler類提取出來,就會有一個問題,我按del鍵刪除一個控制項時沒有問題,但是在在屬性中編輯某個屬性時也會用到del鍵,這時也會把設計表單中的選中的控制項刪除,

.net版本用的是2.0,所以需要手動添加system.core.dll和system.xml.linq.dll的引用,還有newlife.core.dll的引用。

下面是我上傳的原始碼,運行時的:


*******************************************************
壓縮包損壞缺少一個檔案EventBindingService.cs,現在附件上傳不了啦,自己該下命名空間把
using System;using System.Collections;using System.ComponentModel;using System.Reflection;namespace HmFramework.UI.Sprite.Services{internal class EventBindingServiceExt : System.ComponentModel.Design.EventBindingService{public EventBindingServiceExt(IServiceProvider provider): base(provider){}protected override String CreateUniqueMethodName(IComponent component, EventDescriptor e){return String.Format("{0}_{1}", Char.ToUpper(component.Site.Name[0]) + component.Site.Name.Substring(1), e.DisplayName);}// sohuld look around in form class for compatiable methodesprotected override ICollection GetCompatibleMethods(EventDescriptor e){ArrayList al = new ArrayList();MethodInfo methodInfo = e.EventType.GetMethod("Invoke");if (null != methodInfo){al.Add(methodInfo.Name);}return al;}protected override Boolean ShowCode(){//IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;//if (window == null) {// return false;//}//FormsDesignerViewContent formDesigner = window.ActiveViewContent as FormsDesignerViewContent;//if (formDesigner != null) {// formDesigner.ShowSourceCode();// return true;//}return false;}protected override Boolean ShowCode(Int32 lineNumber){//IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;//if (window == null) {// return false;//}//FormsDesignerViewContent formDesigner = window.ActiveViewContent as FormsDesignerViewContent;//if (formDesigner != null) {// formDesigner.ShowSourceCode(lineNumber);// return true;//}return false;}protected override Boolean ShowCode(IComponent component, EventDescriptor edesc, String methodName){//System.Windows.Forms.MessageBox.Show("to add:" + component.Site.Name + "\r\n" + methodName);return false;}}}
 
new.png (94.08 K, 下載次數:2)

(2013/8/13 15:24:02 上傳)

 

designer.png (133.23 K, 下載次數:8)

(2013/8/13 15:24:02 上傳)

 

Winform自訂表格單(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.