PropertyGrid使用總結1 PropertyGrid控件說明


我們在做窗體應用程序開發中,通常需要通過以下界面,完成對象的動態修改,其簡單快捷的操作方式,大大提升了我們開發效率,如圖:

在當前原始控件無法滿足我們的要求的時候,我們通常需要自定義控件,為了提升控件的通用性,我們也希望這個控件可以通過以上屬性對話框進行動態修改。我們定義如下控件:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
 
namespace AlbertControlExample.Controls 
{ 
/// <summary>
/// 定義一個新控件
/// </summary>
public class AlbertControlDef : Control 
{ 
public string Header 
{ 
get; set; 
} = "標題"; 
public int Number 
{ 
get; set; 
} = 100; 
public AlbertControlDef() 
{ 
} 
protected override void OnPaint(PaintEventArgs e) 
{ 
base.OnPaint(e); 
} 
} 
} 

將當前的對象拖到界面后,可以看到如下顯示:

除了來自父類的控件之外,定義了2個額外屬性,並且也定義了初始值,其實現如下,以上的顯示可以通過多個標簽進行配置,如下:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
 
namespace AlbertControlExample.Controls 
{ 
/// <summary>
/// 定義一個新控件
/// </summary>
public class AlbertControlDef : Control 
{ 
[DisplayName("頭部")] 
[Description("頭部顯示控件")] 
[Category("特征")] 
[DefaultValue("默認值")] 
[Browsable(true)] 
public string Header 
{ 
get; set; 
} = "標題"; 
[Category("特征")] 
[Browsable(false)] 
public int Number 
{ 
get; set; 
} = 100; 
public AlbertControlDef() 
{ 
} 
protected override void OnPaint(PaintEventArgs e) 
{ 
base.OnPaint(e); 
} 
} 
}

其主要顯示特征可以定義如下:

通過以上的定義,可以實現一些顯示屬性的定義,還有一些特殊類型,可以通過以上進行定義,其編寫如下:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
 
namespace AlbertControlExample.Controls 
{ 
/// <summary>
/// 定義一個新控件
/// </summary>
public class AlbertControlDef : Control 
{ 
[DisplayName("頭部")] 
[Description("頭部顯示控件")] 
[Category("特征")] 
[DefaultValue("默認值")] 
[Browsable(true)] 
public string Header 
{ 
get; set; 
} = "標題"; 
[Category("特征")] 
[Browsable(false)] 
public int Number 
{ 
get; set; 
} = 100; 
[Category("特征")] 
public Color HeaderColor { get; set; } = Color.Coral; 
[Category("特征")] 
public Font headerFont { get; set; } = DefaultFont; 
public AlbertControlDef() 
{ 
} 
protected override void OnPaint(PaintEventArgs e) 
{ 
base.OnPaint(e); 
} 
} 
} 

通過定義一些常用的屬性之后,會發現窗體顯示界面,會自動給我們添加幾個關於這個屬性配置的操作界面,如圖

系統會自動給我們配置對應屬性需要的操作界面,這個系統是如何做到的呢,我們不得提一個重要的類TypeConverter,其是把我們輸入的信息,轉化為指定對象。如前面Number屬性,我們輸入的值是字符串,其會自動調用Int32Converter實現字符串和數字之間的互相轉換。我們常用的轉換類有:

UInt16Converter

提供用於在 16 位無符號整數對象與其他表示形式之間實現相互轉換的類型轉換器。

UInt32Converter

提供用於在 32 位無符號整數對象與其他各種表示形式之間實現相互轉換的類型轉換器。

UInt64Converter

提供用於在 64 位無符號整數對象與其他表示形式之間實現相互轉換的類型轉換器

ArrayConverter

提供將 Array 對象與其他各種表示形式相互轉換的類型轉換器。

ColorConverter

將顏色從一種數據類型轉換為另一種數據類型

FontConverter

Font 對象從一種數據類型轉換成另一種數據類型。

通過以上的TypeConverter實現PropertyGrid輸入的文字與對應的類型相互轉換。

下一節,我們介紹TypeConverter的使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM