最近的項目中有一個瀑布圖(彩圖)的功能,就是把空間和時間上的點量值以圖的形式呈現出來,如下圖:
X坐標為空間,水平方向的一個像素代表一個空間單位(例如50米)
Y坐標為時間,垂直方向的一個像素代表一個時間單位(例如1秒)
由于沒有現成的彩圖控件可以使用,于是就自己嘗試的寫了一個用戶控件,這篇博客就是講述了如何編寫一個類似的用戶控件。
該用戶控件使用了自繪制的功能,其實要實現自繪制還是比較容易的,按以下的幾個步驟即可:
1,創建一個繼承自 System.Windows.Forms.UserControl 的類。右擊解決方案項目,選擇“添加” “用戶控件”,輸入控件名稱。
public partial class ColorControl : UserControl
2,設置控件 DoubleBuffered 為true,對控件進行雙緩存處理,減少繪制控件時的閃爍。
3,在構造函數里添加如下代碼:
設置 Control 類的 ResizeRedraw 為true,取消了在調整控件大小時的拖尾現象(之前繪制的內容沒有擦除)
// // 摘要: // 獲取或設置一個值,該值指示控件在調整大小時是否重繪自己。 // // 返回結果: // 如果控件在調整大小時重繪自己,則為 true;否則為 false。 PRotected bool ResizeRedraw { get; set; }
public ColorControl() { InitializeComponent(); ResizeRedraw = true; }
4,重寫控件的 OnPaint 方法
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // 開始繪制自己的代碼即可 Draw(e.Graphics, this.ClientRectangle); }
具體的 Draw 方法如何寫就看項目對控件的需求了。下面是個簡單的Draw方法截圖:
當然在制作圖表控件還是有很多東西需要考慮的,最基本的繪制坐標系,繪制標題,繪制主內容區域,還要提供一些事件和方法供客戶類使用。這后面的東西可以參考開源的 ZedGraph。
新聞熱點
疑難解答