技术开发 频道

C# 自定义控件开发之 Grid 开发之旅


【IT168技术文档】

一、 从简单自定义控件开发开始:
  1. 概要原理:
  在之前已经给大家演示了控件缩放拖放的程序,今天就相关代码来跟大家一起研究一下控件开发的基本知识。

  在上面的演示程序中可操作的“控件”其实并不是继承于Control的控件(即使可以做成继承于Control的控件)而是一个一个画出来的图(以下以控件称呼)!(后面也会介绍Grid中也类同)
  我们可以想象上面图1,我们是在某一个Left为x,Top为y的位置中画一个Width为a,Height为b的矩形。当鼠标靠近矩形边缘的时候鼠标的状态相应的改变。当鼠标在矩形边缘上按下左键时我们认为是改变矩形的大小!
  2. 控件显示实现:
  在实际编程中我用到了两个类一个是用于保存所有需要画出来的矩形的状态值命名为DesignCtrlCell他并不继承Control因为他只是保存矩形的状态值,另一个是装载这些控件的容器命名为DesignPanel
  DesignCtrlCell保存了控件的一般属性包括:
1const int MinWidth = 1; 2const int MinHeight = 1; 3private int m_width = 35; 4private int m_height = 25; 5private int m_left = 0; 6private int m_top = 0; 7private int m_right = 0; 8private int m_bottom = 0; 9//以及描述控件是否被选中、拖动等 10private bool m_drag = false; 11private bool m_selected = false; 12//显示值、备注与关连值 13private string m_value; 14//当需要在界面上画的时候,我们需要另外一个函数: 15/**//// <summary> 16/// 绘画对象 17/// </summary> 18/// <param name="g"></param> 19public void Draw(System.Drawing.Graphics p_g) 20{ 21 //控件颜色 22 Color color = m_selected == true ? m_selectedColor : m_defaultColor; 23 24 p_g.FillRectangle(new SolidBrush(color), new Rectangle(m_tLeft, m_tTop, m_tWidth, m_tHeight)); 25 p_g.DrawRectangle(m_pen, new Rectangle(m_tLeft, m_tTop, m_tWidth, m_tHeight)); 26 27 SolidBrush brush = new SolidBrush(Color.Black); 28 29 Font font = Control.DefaultFont; 30 p_g.DrawString(m_value, font, 31 (Brush)brush, new PointF(m_tLeft + 3, m_tTop + 3)); 32} 33
0
相关文章