程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.net控件開發系列之七

ASP.net控件開發系列之七

編輯:關於ASP.NET

ComponentEditor

“第二選擇”

上篇中,關於Editor說了那麼多,完了嗎?沒有,上篇僅僅介紹了操作屬性的UITypeEditor而已。還記得DataGrid的屬性窗口的下方的“屬性生成器...”嗎?

當我們點擊“屬生生成器...”後,IDE彈出一個窗體,提供我們全方位的操作DataGrid屬性的交互界面,這個界面比PropertyGrid提供更方便易用的,更符合DataGrid“國情”。所以,用戶有了屬性窗格之外的第二個選擇。

那麼這個“屬性生成器...”是什麼呢?它也是一個Editor,只是它不是一個UITypeEditor,而是一個ComponentEditor,對,它是一個組件編輯器,它不是用來編輯某個屬性的,而是用來操作整個控件的。

下面我們就以實例來看看要實現組件編輯器,要做哪些工作?

控件主體類

[
   Designer(typeof(MyDesigner)),
   Editor(typeof(MyComponentEditor), typeof(ComponentEditor))
   ]
   public class MyControl :WebControl {
   }

在這裡我們用到了兩個Attribute來描述我們的控件主體類:Designer和Editor,第一個為控件主體類關聯一個設計器,這裡之所以要用到設計器,因為要方便的調用組件編輯器要借助Designer類。第二個Attribute為控件主體類關聯了一個編輯器,大家可以看到它的第二個參數變成了ComponentEditor而不是UITypeEditor。

編輯器窗體類

public class MyComponentEditorForm : System.Windows.Forms.Form {
     private MyControl _myControl;
     public myControlComponentEditorForm(myControl component) {
       InitializeComponent();
       _myControl = component;
  //用_myControl的屬性初始化本窗體上的操作控件(如一些TextBox,還以我以前講到的PropertyGrid的值)。
     }
//以下是用戶點擊確定完成編輯的邏輯綱要
     private void okButton_Click(object sender, System.EventArgs e) {
這裡使用PropertyDescriptor來為Component賦值與直接用 _myControl.Property_1 = textBox1.Text 這樣的邏輯來賦值有一個好處,就是支持操作的Undo功能#region 這裡使用PropertyDescriptor來為Component賦值與直接用 _myControl.Property_1 = textBox1.Text 這樣的邏輯來賦值有一個好處,就是支持操作的Undo功能
       PropertyDescriptorCollection props = TypeDescriptor.GetProperties(_myControl);
       try {
         PropertyDescriptor property_1 = props["Property_1"];
         if (textProperty != null) {
           textProperty.SetValue(_myControl, textBox1.Text);
         }
       }
       catch {
       }
       DialogResult = DialogResult.OK;
       Close();
#endregion
     }
   }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved