国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

探尋C# WinForm控件開發實現下拉式屬性編輯器

開發 后端
和模態對話框編輯器一樣,C# WinForm控件開發環境并不會直接調用我們的編輯器控件,而是用過UITypeEditor類的派生來實現編輯器的調用,所以我們必須實現一個下拉式編輯器。

這篇文章我將介紹如何編寫下拉式屬性編輯器。下拉式(DropDown)屬性編輯器和模態對話框屬性編輯器的不同之處就是,當你點擊屬性值修改的時候,模態對話框編輯器是彈出一個模態對話框,而下拉式屬性編輯器卻是在緊貼著屬性值的地方顯示一個下拉的控件。

不知道大家注意到了沒有,這里我說的是顯示一個下拉的控件,而這個控件也是需要你去C# WinForm控件開發的,接下來我還是以Scope屬性為例,介紹一下具體的實現。

首先我們要創建一個用于編輯屬性的控件,在本系列文章的開始,我們介紹了自定義控件有三種類型:復合控件,擴展控件,自定義控件。在本例中我們制作一個復合控件(Compsite control),復合控件的C# WinForm控件開發比較簡單,不在本系列文章的講解范圍。

我簡單做個介紹,在Solution 瀏覽器里右鍵點擊CustomControlSample工程選擇Add->User Control…,輸入文件名ScopeEditorControl.cs。我們做的這個復合控件上一篇文章介紹的模態對話框所包含子控件基本一樣,除了用于確認和取消的按鈕,如下圖:

模態對話框所包含子控件
C# WinForm控件開發下拉式屬性編輯器

由于我們取消了用于確認和取消的按鈕,并且是一個下拉的編輯器控件,在出現下面三種情況的時候下拉的編輯器控件會關閉:用戶敲了回車,用戶敲了ESC鍵,用戶點擊了編輯器以外的地方。當下拉編輯器控件關閉的時候我們就需要更新屬性的值。下邊是這個控件的代碼:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Drawing;  
  5. using System.Data;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8. namespace CustomControlSample  
  9. {  
  10.     public partial class ScopeEditorControl : UserControl  
  11.     {  
  12.         private Scope _oldScope;  
  13.         private Scope _newScope;  
  14.         private Boolean canceling;  
  15.         public ScopeEditorControl(Scope scope)  
  16.         {  
  17.             _oldScope = scope;  
  18.             _newScope = scope;  
  19.             InitializeComponent();  
  20.         }  
  21.         public Scope Scope  
  22.         {  
  23.             get 
  24.             {  
  25.                 return _newScope;  
  26.             }  
  27.         }  
  28.         private void textBox1_Validating(object sender, CancelEventArgs e)  
  29.         {  
  30.             try 
  31.             {  
  32.                 Int32.Parse(textBox1.Text);  
  33.             }  
  34.             catch (FormatException)  
  35.             {  
  36.                 e.Cancel = true;  
  37.                 MessageBox.Show("無效的值""驗證錯誤",
     MessageBoxButtons.OK, MessageBoxIcon.Error);  
  38.             }  
  39.         }  
  40.         private void textBox2_Validating(object sender, CancelEventArgs e)  
  41.         {  
  42.             try 
  43.             {  
  44.                 Int32.Parse(textBox2.Text);  
  45.             }  
  46.             catch (FormatException)  
  47.             {  
  48.                 e.Cancel = true;  
  49.                 MessageBox.Show("無效的值""驗證錯誤",
     MessageBoxButtons.OK, MessageBoxIcon.Error);  
  50.             }  
  51.         }  
  52.        protected override bool ProcessDialogKey(Keys keyData)  
  53.         {  
  54.             if (keyData == Keys.Escape)  
  55.             {  
  56.                 _oldScope = _newScope;  
  57.                 canceling = true;  
  58.             }  
  59.             return base.ProcessDialogKey(keyData);  
  60.         }  
  61.         private void ScopeEditorControl_Leave(object sender, EventArgs e)  
  62.         {  
  63.             if (!canceling)  
  64.             {  
  65.                 _newScope.Max = Convert.ToInt32(textBox1.Text);  
  66.                 _newScope.Min = Convert.ToInt32(textBox2.Text);  
  67.             }  
  68.         }  
  69.         private void ScopeEditorControl_Load(object sender, EventArgs e)  
  70.         {  
  71.             textBox1.Text = _oldScope.Max.ToString();  
  72.             textBox2.Text = _oldScope.Min.ToString();  
  73.         }  
  74.     }  

和模態對話框編輯器一樣,C# WinForm控件開發環境并不會直接調用我們的編輯器控件,而是用過UITypeEditor類的派生來實現編輯器的調用,所以我們必須實現一個下拉式編輯器。代碼如下:

  1. using System;  
  2. using System.ComponentModel;  
  3. using System.Drawing.Design;  
  4. using System.Windows.Forms.Design;  
  5. using System.Windows.Forms;  
  6. namespace CustomControlSample  
  7. {  
  8.     public class ScopeDropDownEditor : UITypeEditor  
  9.     {  
  10.         public override UITypeEditorEditStyle GetEditStyle
    (ITypeDescriptorContext context)  
  11.         {  
  12.             if (context != null && context.Instance != null)  
  13.             {  
  14.                 return UITypeEditorEditStyle.DropDown;  
  15.             }  
  16.             return base.GetEditStyle(context);  
  17.         }  
  18.         public override object EditValue(ITypeDescriptorContext context, 
    IServiceProvider provider, 
    object value)  
  19.         {  
  20.             IWindowsFormsEditorService editorService = null;  
  21.             if (context !=
     
    null && context.Instance != null && provider != null)  
  22.             {  
  23.                 editorService = 
    (IWindowsFormsEditorService)provider.GetService
    (
    typeof(IWindowsFormsEditorService));  
  24.                 if (editorService != null)  
  25.                 {  
  26.                     MyListControl control = 
    (MyListControl)context.Instance;  
  27.                     ScopeEditorControl editorControl = 
    new ScopeEditorControl(control.Scope);  
  28.                     editorService.DropDownControl(editorControl);  
  29.                     value = editorControl.Scope;  
  30.                     return value;  
  31.                 }  
  32.             }  
  33.             return value;  
  34.         }  
  35.     }  
  36. }  
  37.  

 看過上一篇文章的朋友應該對這段代碼很熟悉,是的,這兩個編輯器的代碼只有幾行不同之處,在GetEditStyle方法中,我們返回的是UITypeEditorEditStyle.DropDown,而不是UITypeEditorEditStyle.Modal,表明我們的編輯器是一個下拉式的編輯器。

在EditValue中的不同之處是,我們使用DropDownControl方法來顯示編輯器。編輯器制作完畢,我們把Scope以前的編輯器替換成下拉式編輯器,如下:

  1. [Browsable(true)]  
  2.         [Editor(typeof(ScopeDropDownEditor), typeof(UITypeEditor))]  
  3.         public Scope Scope  
  4.         {  
  5.             get 
  6.             {  
  7.                 return _scope;  
  8.             }  
  9.             set 
  10.             {  
  11.                 _scope = value;  
  12.             }  
  13.         } 

 現在build CustomControlSample工程,然后切換到測試工程查看Scope屬性。當我們點擊屬性的值,在屬性值的后邊出現了一個按鈕:

Scope屬性
C# WinForm控件開發下拉式屬性編輯器

當點擊這個按鈕的時候,下拉的屬性編輯器出現了:

好了,C# WinForm控件開發的下拉式屬性編輯器的編輯到這里就講完了。

C# WinForm控件 
C# WinForm控件開發下拉式屬性編輯器

【編輯推薦】

  1. 細說C++委托和消息反饋模板
  2. 詳解C#基礎之委托異步
  3. 詳解C#委托、時間和Lambda表達式
  4. 詳解.NET中容易混淆的委托與接口
責任編輯:阡陌 來源: 博客園
相關推薦

2009-09-11 10:41:20

C# WinForm控

2009-09-11 09:17:00

C# Button

2015-08-05 09:30:32

C#下拉式計算器

2009-09-01 10:35:59

C# WinForm控

2009-08-20 09:30:03

C#開發WinForm

2009-08-20 10:24:52

C#開發WinForm

2009-09-11 12:07:12

C# WinForm控

2009-09-11 11:33:58

C# WinForm控Attribute

2009-09-11 12:31:15

C# WinForm控設置默認值

2023-10-19 10:12:34

圖形編輯器開發縮放圖形

2025-02-05 12:01:35

屬性編輯器Web

2023-10-10 16:04:30

圖形編輯器格式轉換

2009-09-11 12:17:59

C#控件屬性

2009-09-11 09:59:47

2021-03-13 14:02:16

C#控件動態

2009-10-10 14:54:44

treeView1控件

2009-08-24 10:10:09

C#復合控件

2009-08-26 17:10:09

C# 3.5新特性

2009-09-10 18:18:42

C# Button

2022-12-02 07:24:46

點贊
收藏

51CTO技術棧公眾號

成人免费看吃奶视频网站| 日韩女优制服丝袜电影| 老牛精品亚洲成av人片| 中文字幕一区二区在线播放| 精品嫩草影院久久| 老熟妇仑乱视频一区二区| 国产精品av久久久久久麻豆网| 中文字幕一区二区三| 久久综合给合久久狠狠色| 四虎影视精品成人| 欧美大人香蕉在线| 揄拍成人国产精品视频| 日韩片电影在线免费观看| 国产在线69| 亚洲男人电影天堂| 欧美黑人在线观看| 成人交换视频| 日韩精品中文字幕一区 | 污片在线免费观看| 玉米视频成人免费看| 久久久久久国产| 狠狠操一区二区三区| 色av成人天堂桃色av| 交视频在线观看国产| 久久亚洲精品国产精品紫薇 | 中文字幕精品影院| 精品国产欧美一区二区三区成人| 日韩精品分区| 欧美疯狂性受xxxxx喷水图片| 免费免费啪视频在线观看| 久久久久久久久岛国免费| 综合一区中文字幕| 久久精品盗摄| 久久av一区二区三区漫画| 手机亚洲手机国产手机日韩| 97热精品视频官网| 欧美久久香蕉| 人人爽久久涩噜噜噜网站| 超碰在线亚洲| 最新久久zyz资源站| 国产日韩av网站| 国产乱子轮精品视频| 亚洲mv在线看| 日韩精品成人一区二区在线| 免费久久99精品国产自| 亚洲美女一区| 精品一区二区三区国产| 亚洲区欧美区| 欧洲精品久久| 日本麻豆一区二区三区视频| 日韩少妇中文字幕| 激情综合色播五月| 热久久最新网址| av在线一区二区三区| 国产91在线免费| 日韩欧美ww| 奇米影视亚洲狠狠色| 欧美91在线| 欧洲美女7788成人免费视频| 色棕色天天综合网| 国产精品一区二区三区毛片淫片| 水蜜桃久久夜色精品一区| 91嫩草在线| 日本黄色免费在线| 欧美成人女星排行榜| 成人ssswww在线播放| 中文一区二区视频| www.神马久久| 国产精品亚洲美女av网站| 狠狠色丁香久久综合频道| 日本不卡在线播放| 成人在线一区二区三区| 国产精品久久视频| 国产精品久久久久9999赢消| 日韩精品免费在线| 成人av色网站| 欧美性受xxx| 欧美黄色aaaa| 宅男噜噜99国产精品观看免费| 成人免费看黄yyy456| 午夜电影福利网| 欧美视频一二三| 粗大黑人巨茎大战欧美成人| 久久综合精品国产一区二区三区 | 日本成人精品在线| 欧美成人首页| 黄色a级在线观看| 国产日产精品一区| 欧洲亚洲一区二区| 成人一道本在线| 日本激情视频网| 日韩精品一区二区三区在线| 精品精品视频| 国产一区视频观看| 久久老女人爱爱| 日本在线免费网| 亚洲精品美腿丝袜| 麻豆网站在线| 久久久久北条麻妃免费看| 久久国产精品亚洲人一区二区三区 | 久久天堂精品| 91香蕉视频导航| 三级影片在线观看欧美日韩一区二区| 国产情侣第一页| 一区二区三区欧美| 亚洲精品动漫| 亚洲一区二区久久久久久| 国产成人高清精品免费5388| 国产精品区一区| 成人网18免费网站| 资源网第一页久久久| 亚洲一区二区三区四区在线观看| 欧美亚洲另类色图| 色偷偷88欧美精品久久久 | 亚洲三级小视频| 538在线视频| 911精品国产一区二区在线| 亚洲精品一区二区在线播放∴| 亚洲欧美国产日韩天堂区| 免费精品国产的网站免费观看| 一区二区三视频| 福利一区福利二区微拍刺激| 成人网18免费软件大全| 日韩精品一区二| 日韩毛片视频| 久久九九国产视频| 久久一区二区视频| a级毛片免费观看在线| 国产精品久久久久久久av大片 | 日韩成人在线资源| 综合激情成人伊人| 青青青国产精品| 日韩专区中文字幕| 久久精品亚洲| 在线观看国产麻豆| 91精品国产色综合| 欧美黑白配在线| 日韩一级免费看| 91精品国产乱| 亚洲va在线| 97影院在线观看| 精品久久久一区| 成人激情久久| 亚洲黄色网址在线观看| 91精品欧美一区二区三区综合在| 日韩电影免费网址| 国产美女免费观看| 66m—66摸成人免费视频| 91在线观看视频| 高清av一区| 日本道在线视频| 亚洲电影天堂av| 国产欧美日韩综合一区在线播放| 在线中文视频| 国产精品678| 亚洲综合男人的天堂| 国产99亚洲| 亚洲一区二区三| 亚洲香蕉伊在人在线观| 伊甸园亚洲一区| 韩国版免费三体| 国产精品久久久久久久久久久久久| 国产欧美一区二区精品婷婷| 国产精品1区在线| 国产成人久久777777| 麻豆国产精品va在线观看不卡| 99精品国产视频| 欧洲精品99毛片免费高清观看 | 国产精品精品久久久| 亚洲少妇中出一区| 亚洲精品亚洲人成在线| 黄页在线观看| 国产精品视频一区二区高潮| 日韩欧美成人区| 亚洲裸体俱乐部裸体舞表演av| 黄色av免费在线| 亚洲精品9999| 国产亚洲精品日韩| 国产午夜精品久久久久久久 | 亚洲一二三专区| 操欧美老女人| 成人在线观看免费| 中文字幕亚洲天堂| 久久免费国产精品| 国产91精品对白在线播放| 三级网站在线| 日韩精品在线影院| 欧美日韩激情在线一区二区三区| 香蕉自在线视频| 国产精品免费观看高清| 精品国内二区三区| 高清不卡一区二区在线| 中文字幕大看焦在线看| 成人3d动漫一区二区三区91| 日韩一区二区视频在线观看| 国产福利一区二区三区视频| 国产精品天天看天天狠| 午夜亚洲成人| 青青草免费在线视频观看| 午夜精品久久久久久久99黑人|